Шестнадцатеричная константа без знака в C? - PullRequest
26 голосов
/ 19 января 2011

Обрабатывает ли C шестнадцатеричные константы (например, 0x23FE) и целые числа со знаком или без знака?

Ответы [ 3 ]

26 голосов
/ 19 января 2011

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

int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
11 голосов
/ 19 января 2011

Он обрабатывает их как int литералы (в основном, со знаком int!).Чтобы написать беззнаковый литерал, просто добавьте u в конце:

0x23FEu
1 голос
/ 02 сентября 2018

Согласно cppreference , тип шестнадцатеричного литерала является первым типом в следующем списке, в который может помещаться значение.

int
unsigned int
long int
unsigned long int
long long int(since C99)
unsigned long long int(since C99) 

Таким образом, это зависит от того, насколько большойномер есть.Если ваш номер меньше INT_MAX, то он имеет тип int.Если ваше число больше INT_MAX, но меньше UINT_MAX, оно относится к типу unsigned int и т. Д.

Поскольку 0x23FE меньше INT_MAX (то есть 0x7FFFили больше), он имеет тип int.

Если вы хотите, чтобы он был без знака, добавьте u в конце числа: 0x23FEu.

...