2013-07-17 2 views
21

Я пришел использовать переменную типа uint16_t, но не могу использовать этот тип данных из-за ограничений моего проекта. Возможно ли unsigned short int вместо uint16_t? Я не знаю разницы между ними обоими. Может ли кто-нибудь прояснить, пожалуйста?В чем разница между uint16_t и unsigned short int incase 64-битного процессора?

+0

вы пробовали ищете, ЬурейеЕ беззнаковое короткое uint16_t? – Ishmeet

+0

@Ishmeet Я не нашел никакой информации в случае 64-битного процессора – Chinna

+0

@Ishmeet Я портирую код с одного процессора на другой, и я нашел его – Chinna

ответ

39

uint16_t - это неподписанное 16-битовое целое число.

unsigned short int - неподписанное короткое целое число, но размер зависит от реализации. Стандарт только говорит, что он по крайней мере 16-битный (т. Е. Минимальное значение UINT_MAX - 65535). На практике это обычно 16 бит, но вы не можете считать это гарантированным.

Примечание:

  1. Если вы хотите портативный беззнаковое 16-разрядное целое число, используйте uint16_t.
  2. и stdint.h оба представлены на C99. Если вы используете C89, определите свой собственный тип.
  3. uint16_t не может быть предоставлен в определенной реализации (см. Ссылку ниже), но unsigned short int всегда доступен.

Ссылка: С11 (ISO/IEC 9899: 201x) §7.20 типа Integer

Для каждого описанного здесь типа, что обеспечивает реализацию) объявляет, что ЬурейеЕ имя и определить связанные макросы. И наоборот, для каждого описанного здесь типа, который реализация не предоставляет, не объявляет это имя typedef и не определяет связанные макросы. Реализация должна обеспечивать те типы, которые называются «обязательными», но не обязательно предоставлять какие-либо из других (описываемых как «необязательные»).

+1

В принципе, некоторые реализации (и ABI) могут иметь не 16-битные шорты. На практике все обычные 64-битные процессоры и ABI (x86-64, Sparc 64, PowerPC 64, Aarch 64) имеют 16 бит шорт. Но 'int'-s обычно 32 бита. –

+1

Я тоже никогда не видел 64-битную машину с 32-разрядными шортами. – Casey

+2

В качестве примечания обратите внимание на реализацию, в которой 'short int' больше 16 бит, а 'CHAR_BIT' равно 8 (как это почти всегда бывает), тогда просто * невозможно * определить' uint16_t', AFAICT , – Job

18

uint16_t гарантированно быть беззнаковое целое число, которое составляет 16 бит большой

unsigned short int гарантированно быть без знака short integer, где short integer определяется компилятором (и потенциально флаги компилятора) вы используете. Для большинства компиляторов для x86-оборудования short integer имеет 16 бит.

Также отметим, что в the ANSI C standard только минимальный размер 16 бит, определяется, максимальный размер до разработчика компилятора

Минимальное Тип Пределы

Любой компилятор, соответствующей Стандарт должен также соблюдать следующие ограничения в отношении диапазона значений, которые могут быть приняты любым из типов . Обратите внимание, что это нижние пределы: реализация может превышать любые или все из них. Также обратите внимание, что минимальный диапазон для символа зависит от того, считается ли символ подписанным или неподписанным.

Тип Минимальный диапазон

signed char  -127 to +127 
unsigned char  0 to 255 
short int  -32767 to +32767 
unsigned short int 0 to 65535 
Смежные вопросы