Ответ 1
Они могут иметь одинаковый размер, но гарантировано, что int
равно или больше, чем short int
.
Как короткий int (или короткий) и int другой в C? Они имеют одинаковый размер и диапазон. Если они по существу одинаковы, то зачем использовать два типа данных?
Они могут иметь одинаковый размер, но гарантировано, что int
равно или больше, чем short int
.
В теории/по стандарту C они могут быть любого размера, если short <= int
.
В реальном мире именно так реализованы размеры.
CPU short int
8 bit 16 16
16 bit 16 16
32 bit 16 32
64 bit 16 32
Никогда не полагайтесь на тип данных, являющийся заданным размером в C. Всегда проверяйте границы в пределах. Если у вас есть сомнения.
Это зависит от системы. Некоторые ОС не будут иметь одинаковую длину для обоих типов.
Все, что мы теперь точно знаем, что:
2 <= sizeof(short) <= sizeof(int)
5.2.4.2.1 Размеры целочисленных типов <limits.h>
дают минимальные размеры:
1 [...] Их значения, определяемые реализацией, должны быть равны или больше по величине (по абсолютной величине) показанным [...]
- UCHAR_MAX 255//2 8 - 1
- USHRT_MAX 65535//2 16 - 1
- UINT_MAX 65535//2 16 - 1
- ULONG_MAX 4294967295//2 32 - 1
- ULLONG_MAX 18446744073709551615//2 64 - 1
6.2.5 Типы затем говорят:
8 Для любых двух целых типов с одинаковой степенью соответствия и разного целочисленного преобразования (см. 6.3.1.1), диапазон значений типа с меньшим целым числом ранга преобразования равен поддиапазон значений другого типа.
и 6.3.1.1 Булевы, символы и целые числа определяют относительные числа рангов:
1 Каждый целочисленный тип имеет целочисленный ранг преобразования, определяемый следующим образом:
- Ранг long long int должен быть больше ранга long int, который должен быть больше ранга int, который должен быть больше ранга короткого int, который должен быть больше ранга подписанного char.
- Ранг любого беззнакового целочисленного типа должен быть равен рангам соответствующего значный целочисленный тип, если он есть.
- Для всех целых типов T1, T2 и T3, если T1 имеет больший ранг, чем T2, а T2 имеет больший ранг, чем T3, то T1 имеет больший ранг, чем T3
"Короткое целое число на одном языке программирования может быть другого размера на другом языке или на другом процессоре. На некоторых языках этот размер фиксируется на разных платформах, а в других - машинно-зависимая. На некоторых языках этот тип данных не существует на все".
На самом деле все зависит от компилятора и системы. Но основное правило гласит, что int никогда не может быть меньше короткого и никогда не может быть длиннее.
short <= int <= long
Я работал над этим же сегодня. Мое заключение заключается в зависимости от длины слова машинной архитектуры, на которой выполняется ваша программа. Согласно документации C99 limits.h.
/* Minimum and maximum values a `signed short int' can hold. */
# define SHRT_MIN (-32768)
# define SHRT_MAX 32767
/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
# define USHRT_MAX 65535
/* Minimum and maximum values a `signed int' can hold. */
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */
# define UINT_MAX 4294967295U
/* Minimum and maximum values a `signed long int' can hold. */
# if __WORDSIZE == 64
# define LONG_MAX 9223372036854775807L
# else
# define LONG_MAX 2147483647L
# endif
# define LONG_MIN (-LONG_MAX - 1L)
/* Maximum value an `unsigned long int' can hold. (Minimum is 0.) */
# if __WORDSIZE == 64
# define ULONG_MAX 18446744073709551615UL
# else
# define ULONG_MAX 4294967295UL
# endif
Сообщите мне, если кто-то лучше ответит.