C是否处理十六进制常量(例如0x23FE)是有符号整数还是无符号整数?
0x23FE
kzipqqlq1#
数字本身总是被解释为非负数。十六进制常量没有符号或任何固有的方式来表示负数。常量的类型是可以表示其值的第一个类型:
int unsigned int long int unsigned long int long long int unsigned long long int
bzzcjhmw2#
它将它们视为int文字(基本上,作为有符号int!)。要写一个无符号的文字,只需在末尾添加u:
int
u
0x23FEu
oxosxuxt3#
根据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。
INT_MAX
UINT_MAX
unsigned int
0x7FFF
3条答案
按热度按时间kzipqqlq1#
数字本身总是被解释为非负数。十六进制常量没有符号或任何固有的方式来表示负数。常量的类型是可以表示其值的第一个类型:
bzzcjhmw2#
它将它们视为
int
文字(基本上,作为有符号int!)。要写一个无符号的文字,只需在末尾添加u
:oxosxuxt3#
根据cppreference,十六进制文字的类型是下面列表中可以容纳该值的第一个类型。
这取决于你的数字有多大。如果你的数字小于
INT_MAX
,那么它的类型是int
。如果你的数字大于INT_MAX
但小于UINT_MAX
,它的类型是unsigned int
,依此类推。由于
0x23FE
小于INT_MAX
(等于或大于0x7FFF
),因此它的类型为int
。如果你想让它是无符号的,在数字的末尾加上一个
u
:0x23FEu
。