C中的无符号十六进制常量?

时间:2011-01-19 16:22:17

标签: c constants hex unsigned signed

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

3 个答案:

答案 0 :(得分:26)

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

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

答案 1 :(得分:11)

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

0x23FEu

答案 2 :(得分:1)

根据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