Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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.