Я пришел использовать переменную типа uint16_t
, но не могу использовать этот тип данных из-за ограничений моего проекта. Возможно ли unsigned short int
вместо uint16_t
?
Я не знаю разницы между ними. Может кто-нибудь прояснить пожалуйста?
В чем разница между uint16_t и unsigned short int incase 64-битного процессора?
Ответ 1
uint16_t
- это неподписанное 16-разрядное целое число.
unsigned short int
- беззнаковое короткое целое число, но размер зависит от реализации. Стандарт только говорит, что он не менее 16-бит (т.е. Минимальное значение UINT_MAX
равно 65535
). На практике это обычно 16 бит, но вы не можете считать это гарантированным.
Примечание:
- Если вы хотите использовать 16-разрядное целое число без знака, используйте
uint16_t
. -
inttypes.h
иstdint.h
вводятся в C99. Если вы используете C89, определите свой собственный тип. -
uint16_t
может не предоставляться в определенной реализации (см. ссылку ниже), ноunsigned short int
всегда доступен.
Ссылка: C11 (ISO/IEC 9899: 201x) §7.20 Целочисленные типы
Для каждого типа, описанного здесь, который обеспечивает реализация) объявляет это имя typedef и определяет связанные макросы. И наоборот, для каждого описанного здесь типа, который реализация не предоставляет, не объявляет это имя typedef и не определяет связанные макросы. Реализация должна обеспечивать те типы, которые называются "необходимыми", но не обязательно предоставлять какие-либо другие (описываемые как "необязательные).
Ответ 2
uint16_t
гарантируется целое число без знака, которое имеет 16 бит больших
unsigned short int
гарантированно будет unsigned short integer
, где short integer
определяется компилятором (и потенциально флагов компилятора), который вы используете в настоящее время. Для большинства компиляторов для аппаратного обеспечения x86 размер short integer
составляет 16 бит.
Также обратите внимание, что в стандарте ANSI C) определяется только минимальный размер 16 бит, максимальный размер зависит от разработчика компилятора
Минимальные ограничения по типу
Любой компилятор, соответствующий Стандарту, должен также уважать следующие пределы в отношении диапазона значений, любые конкретные тип может принять. Обратите внимание, что это нижние пределы: реализация может превышать любые или все из них. Отметим также, что минимальный диапазон для char зависит от того, считается ли charдля подписания или без знака.
Тип Минимальный диапазон
signed char -127 to +127 unsigned char 0 to 255 short int -32767 to +32767 unsigned short int 0 to 65535