Нет, short
делает not гарантией 16-битной длины. Единственными гарантиями в отношении основных целых типов данных являются:
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
sizeof(char) == 1
(примечание: a char
все равно может быть более 8 бит!) SHRT_MIN <= -32767
и SHRT_MAX >= 32767
(подразумевается, что short
составляет не менее 16 бит) INT_MIN <= -32767
и INT_MAX >= 32767
(подразумевает int
не менее 16 бит) LONG_MIN <= -2147483647
и LONG_MAX >= 2147483647
(подразумевается, что long
составляет не менее 32 бит) LLONG_MIN <= -9223372036854775807
и LLONG_MAX >= 9223372036854775807
(подразумевается, что long long
не менее 64 бит) (C99 §5.2.4.2.1 и приложение E)
Тот факт, что short
задан int16_t
на , ваш означает, что short
- 16 бит на вашей машине . Это не означает, что определение будет одинаковым на машинах других людей (или даже на других компиляторах на вашей же машине).
Если вы включите <stdint.h>
, он определит int16_t
каким-то образом который гарантированно будет типом, который подписан и имеет ширину 16 бит. Если вам нужны точные размерные числа, используйте те точные типы.