В чем разница между "short int" и "int" в C? - программирование
Подтвердить что ты не робот

В чем разница между "short int" и "int" в C?

Как короткий int (или короткий) и int другой в C? Они имеют одинаковый размер и диапазон. Если они по существу одинаковы, то зачем использовать два типа данных?

4b9b3361

Ответ 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

C99 N1256 стандартный проект

Все, что мы теперь точно знаем, что:

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

Сообщите мне, если кто-то лучше ответит.