Как короткий int (или короткий) и int другой в C? Они имеют одинаковый размер и диапазон. Если они по существу одинаковы, то зачем использовать два типа данных?
В чем разница между "short int" и "int" в C?
Ответ 1
Они могут иметь одинаковый размер, но гарантировано, что int
равно или больше, чем short int
.
Ответ 2
В теории/по стандарту C они могут быть любого размера, если short <= int
.
В реальном мире именно так реализованы размеры.
CPU short int
8 bit 16 16
16 bit 16 16
32 bit 16 32
64 bit 16 32
Ответ 3
Никогда не полагайтесь на тип данных, являющийся заданным размером в C. Всегда проверяйте границы в пределах. Если у вас есть сомнения.
Ответ 4
Это зависит от системы. Некоторые ОС не будут иметь одинаковую длину для обоих типов.
Ответ 5
Все, что мы теперь точно знаем, что:
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
Ответ 6
"Короткое целое число на одном языке программирования может быть другого размера на другом языке или на другом процессоре. На некоторых языках этот размер фиксируется на разных платформах, а в других - машинно-зависимая. На некоторых языках этот тип данных не существует на все".
Ответ 7
На самом деле все зависит от компилятора и системы. Но основное правило гласит, что int никогда не может быть меньше короткого и никогда не может быть длиннее.
short <= int <= long
Ответ 8
Я работал над этим же сегодня. Мое заключение заключается в зависимости от длины слова машинной архитектуры, на которой выполняется ваша программа. Согласно документации 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
Сообщите мне, если кто-то лучше ответит.