Беззнаковая шестнадцатеричная константа в C?

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

3 ответов


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

int
unsigned int
long int
unsigned long int
long long int
unsigned long long int

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

0x23FEu

по данным 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.