Беззнаковая шестнадцатеричная константа в 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
.