LINUX.ORG.RU

uint32_t, uint64_t ?

UVV ★★★★★
()
Ответ на: комментарий от elverion

unsigned long long наверное будет не всегда одинаковым на разных архитектурах

а вот uint32_t у меня GCC не находит , хотя int32_t такой тип есть

morkovkin
() автор топика
Ответ на: комментарий от elverion

> Оно гарантировано >=64

Только вот его наличие никак не гарантировано в ANSI C. А если уж выходит за рамки, то лучше stdint.h и не выпендриваться.

const86 ★★★★★
()

> Скажите как это можно сделать

в общем случае — никак.

> и есть 128 или 256 битная?

скорее всего, есть. и «ANSIС» это вполне допускает. но тебе это не поможет…

arsi ★★★★★
()
Ответ на: комментарий от const86

>Только вот его наличие никак не гарантировано в ANSI C. А если уж выходит за рамки, то лучше stdint.h и не выпендриваться.

В ISO C99 long long является стандартным целочисленным типом, таким же как long, int и char.

anonymous
()
Ответ на: комментарий от hired777

>хм, а разве в стандарте не сказано, что-то типа

int <= long <= long long ?

Сказано. А также там сказано, что каждый целочисленный тип имеет некоторое ограничение снизу на число представляемых им значений, см. 5.2.4.2.1 Sizes of integer types <limits.h> в стадарте ISO C99.

В частности, из того, что ULLONG_MAX >= 2^64-1 следует, что unsigned long long должен быть как минимум 64-битным.

anonymous
()

Не забывай, что в стандарте не сказано, чему равен байт. Он может быть и меньше, и больше восьми бит.

Obey-Kun ★★★★★
()
Ответ на: комментарий от unsigned

> Современный ANSI C - C99.

ANSI C есть только один — С89. C99 — это уже ISO, ANSI стандартом С больше не занимается.

Relan ★★★★★
()
Ответ на: комментарий от Obey-Kun

>Не забывай, что в стандарте не сказано, чему равен байт. Он может быть и меньше, и больше восьми бит.

Меньше восьми бит он быть не может, см. секцию «2.2.4.2 Numerical limits» стандарта ANSI (http://flash-gordon.me.uk/ansi.c.txt), также см. «5.2.4.2.1 Sizes of integer types <limits.h>» в стадарте ISO C99

anonymous
()
Ответ на: комментарий от anonymous

> Меньше восьми бит он быть не может

байт — может. стандарт си не может влиять на архитектуру процессора. а вот размер char — не может, да. но кто сказал, что чар должен быть ровно один байт? ;)

arsi ★★★★★
()
Ответ на: комментарий от Obey-Kun

> Неправда, ANSI адаптировала его в 2000 году.

Так это просто копия ISO C99, также как ISO C90 — копия ANSI C89.

Relan ★★★★★
()
Ответ на: комментарий от arsi

>байт — может. стандарт си не может влиять на архитектуру процессора.

Ты можешь, конечно, создать компьютер с семибитным байтом,
но эти байты нельзя будет использовать в реализации С
как байты в смысле языка С. Вот цитаты из
«5.2.4.2.1 Sizes of integer types <limits.h>» ISO C99:

— number of bits for smallest object that is not a bit-field (byte)
CHAR_BIT 8

The value UCHAR_MAX shall equal 2^CHAR_BIT − 1.

Из этого можно заключить, что unsigned char должен занимать ровно 1 байт и содержать не менее 8 бит. Поэтому тебе придется в C использовать в качестве «байтов» двухбайтные (14-битные) слова, либо нарушать стандарт.

anonymous
()
Ответ на: комментарий от anonymous

а я тебе о чём? сишный байт (aka char) не обязан быть равен машинному («настоящему») байту (минимальной адресуемой единице памяти процессором).

arsi ★★★★★
()
Ответ на: комментарий от Relan

So what? У тебя есть ISO на зелёный горошек и его адаптация для ГОСТа. Его теперь хоть ISO'шным, хоть ГОСТовским называй, суть не поменяется.

Obey-Kun ★★★★★
()
Ответ на: комментарий от Obey-Kun

> So what? У тебя есть ISO на зелёный горошек и его адаптация для ГОСТа. Его теперь хоть ISO'шным, хоть ГОСТовским называй, суть не поменяется.

Ну, если Денис Попов форкнет стандарт С99, то можно будет ссылаться на него как «Попов С». Но зачем плодить лишние сущности? :)

Relan ★★★★★
()
Ответ на: комментарий от Relan

Плодить лишние сущности - это переопределять в своём узком кругу обещпринятые термины.

И С89, и С99 - стандарты ISO/ANSI.

LamerOk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.