Поддерживает ли C шестнадцатеричные константы (например, 0x23FE) и подписанный или unsigned int?
Неподписанная шестнадцатеричная константа в C?
Ответ 1
Само число всегда интерпретируется как неотрицательное число. Шестнадцатеричные константы не имеют знака или какого-либо неотъемлемого способа выражения отрицательного числа. Тип константы - это первый из них, который может представлять их значение:
int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
Ответ 2
Он рассматривает их как int
литералы (в основном, как подписанные int!). Чтобы написать неподписанный литерал, просто добавьте u
в конец:
0x23FEu
Ответ 3
Согласно 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
.