web-dev-qa-db-ja.com

Cの符号なし16進定数?

Cは16進定数(0x23FEなど)と符号付きまたは符号なし整数を扱いますか?

28
Amr Bekhit

数値自体は常に負でない数として解釈されます。 16進定数には、符号や負の数を表す固有の方法はありません。定数のタイプは、値を表すことができるこれらの最初のタイプです。

int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
27
CB Bailey

それらはintリテラルとして扱われます(基本的に、signed intとして!)。符号なしリテラルを書き込むには、末尾にuを追加するだけです。

0x23FEu
11
AraK

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になります。

0x23FEINT_MAX0x7FFF以上)よりも小さいため、タイプはintです。

署名しない場合は、番号の最後にuを追加します:0x23FEu

1
Searene