int по умолчанию долго int в C? - PullRequest
2 голосов
/ 16 октября 2010

Почему получается, что размер int и long int равны 4 байта? Это что int по умолчанию long int?

Ответы [ 8 ]

9 голосов
/ 16 октября 2010
sizeof(short) <= sizeof(int) <= sizeof(long)

Это все, на что вы можете рассчитывать.Остальное полностью зависит от реализации.В старые времена DOS 16-битные компиляторы обычно имеют sizeof (int) == sizeof (short) == 2. В 32-битных системах sizeof (int) обычно равна sizeof (long) == 4. Как правилоint - тип, с которым процессор может работать быстрее всего.Нет правил без исключений ...

РЕДАКТИРОВАТЬ: Удалено второе правило, sizeof(short) < sizeof(long), которое НЕ является частью стандарта C.На некоторых платформах sizeof(short) может фактически равняться sizeof(long).

7 голосов
/ 16 октября 2010

Размер int не гарантированно равен 4 и не равен размеру long int. Другими словами: это полностью определяется реализацией.

4 голосов
/ 16 октября 2010

Они просто имеют одинаковый размер.

В этом посте обобщено, что вы можете ожидать от типов данных в отношении размера и диапазона.

2 голосов
/ 16 октября 2010

Единственными гарантиями стандартных мандатов являются (предположим, все выражения ниже sizeof (type) вместо type)

char <= short <= int <= long <= long long

так что вы можете иметь

char == short == int == long == long long /* Cray?? */
char <  short <  int == long <  long long /* Windows 32 bit */
char <  short <  int <  long == long long /* Linux 64 bit */
2 голосов
/ 16 октября 2010

Нет, int и long не обязательно имеют одинаковый размер, даже если это происходит в вашем компиляторе.

Стандарт C определяет минимальный размер для каждого из этих типов данных, но фактический размер зависит от реализации. Например, некоторые системы имеют 2 байта int с и 4 байта long с, в то время как другие могут иметь 4 байта int с и 8 байтов long с.

0 голосов
/ 16 октября 2010

В современных 32-битных операционных системах int и long обычно 32-битные или ILP32 (целочисленные, long, указатель), в то время как в 64-битных операционных системах LP64 является обычным, подразумевая, что int 32-битный.long long - это везде 64 бита, которые могут совпадать или не совпадать с long.

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

0 голосов
/ 16 октября 2010

Стандарт C дает следующие гарантии относительно рангов преобразования стандартных целочисленных типов и их точности:

_Bool (1) <  char (8)
          <= short (16)
          <= int (16)
          <= long (32)
          <= long long (64)

В случае _Bool точность является точной, тогда как остальные являются минимальными значениями. Также могут быть дополнительные, так называемые расширенные целочисленные типы.

A char - наименьшая адресуемая единица памяти, поэтому sizeof (char) == 1 независимо от ее точности (которая задается CHAR_BIT) Размеры других стандартных целочисленных типов определяются реализацией. Я подозреваю, что sizeof (_Bool) также будет 1, но я не смог найти в стандарте ничего, что действительно гарантирует это ...

0 голосов
/ 16 октября 2010

Единственной гарантией, предоставляемой стандартом, является то, что sizeof (long)> = sizeof (int).

В старые времена 16-битных процессоров, обычно для int было 2 байта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...