Cは16進定数(0x23FEなど)と符号付きまたは符号なし整数を扱いますか?
数値自体は常に負でない数として解釈されます。 16進定数には、符号や負の数を表す固有の方法はありません。定数のタイプは、値を表すことができるこれらの最初のタイプです。
int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
それらはint
リテラルとして扱われます(基本的に、signed intとして!)。符号なしリテラルを書き込むには、末尾にu
を追加するだけです。
0x23FEu
cppreference によると、16進リテラルのタイプは、値が収まる次のリストの最初のタイプです。
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
。