32

C 是否处理十六进制常量(例如 0x23FE)和有符号或无符号整数?

4

3 回答 3

31

数字本身总是被解释为非负数。十六进制常量没有符号或任何固有的方式来表示负数。常量的类型是其中第一个可以表示其值的类型:

int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
于 2011-01-19T16:27:10.223 回答
16

它将它们视为int文字(基本上,作为有符号整数!)。要编写无符号文字,只需u在末尾添加:

0x23FEu
于 2011-01-19T16:26:08.693 回答
3

根据cppreference,十六进制文字的类型是以下列表中可以容纳该值的第一个类型。

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

所以这取决于你的号码有多大。如果你的数字小于INT_MAX,那么它就是 type int。如果您的数字大于INT_MAX但小于UINT_MAX,则它的类型为unsigned int,依此类推。

由于0x23FE小于INT_MAX0x7FFF大于或等于),因此它是int.

如果您希望它是无符号的,u请在数字末尾添加一个:0x23FEu.

于 2018-09-02T02:47:26.040 回答