C中的无符号hex常量?

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

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

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

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

 0x23FEu 

根据cppreference ,hex文字的类型是以下列表中的第一个类型,其中值可以适合。

 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_MAX0x7FFF或更大),因此它的类型为int

如果您希望它是无符号的,请在数字的末尾添加一个u0x23FEu