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

von4xj4u  于 2023-05-16  发布在  其他
关注(0)|答案(3)|浏览(204)

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

kzipqqlq

kzipqqlq1#

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

int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
bzzcjhmw

bzzcjhmw2#

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

0x23FEu
oxosxuxt

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
如果你想让它是无符号的,在数字的末尾加上一个u0x23FEu

相关问题