プロが教えるわが家の防犯対策術!

0xffffとは?

プログラム初心者です。
C++のプログラムを読んでいたら、0xffffというのが出てきました。
0の補数で-0と考え、0という値として考えたらいいのでしょうか?

また、0xffffuというのも出てきたのですが、これは何ですか?


調べてみたのですが、はっきりとわかるものが見つからなかったので質問しました。
初歩的な質問とは思いますが、回答よろしくお願いします。

A 回答 (5件)

規格を確認しました. int は最低 16ビットなので, 0xffff は unsigned int なら確実に表現することができます. ということで, #3 の通り


・単に 0xffff とあれば int または unsigned int (この値が int に収まれば int, 収まらなければ unsigned int)
・0xffffu なら unsigned int
で, この値を 10進数で表現すれば「0xffff が int に収まる」ときには 65535, 収まらないときには 65535u となります.
    • good
    • 2

0xffffは16bit全てが1で埋まっている状態、という以上の意味はありません。


それをどう解釈するかは扱う側の問題ですから、どういう文脈で出てきたものかがわからないと確定的なことは言えません。
そもそも、それを数値として扱っていいものかどうかすら怪しいのです。

なお数値の場合、補数表現は2の補数なので数値解釈なら16bit値では-1、16bitを超える場合には65535です。

0xffffuの方は「符号なし整数型」として扱うので65535と確定しますが。
    • good
    • 0

あれ? 0xffff は int または unisgned int の 65535 (65535 を int で表すことができれば int, そうでなければ unsigned int) じゃないかなぁ....


0xffffu は確実に unsigned int の 65535 (つまり 65535u) だけど.
    • good
    • 0

0xffffは整数を16進法表現したもので、下16ビットがすべて1の整数、という以外の意味はありません。



16bit符号付き整数の場合(最近の多くの環境ではsigned shortが該当する)、2の補数表現で-1になることはあります。
16bit符号無し(最近の多くの環境ではunsigned shortが該当する)や17bit以上の整数なら(最近の多くの環境ではintやlongが該当する)、単に0xffff(10進表現で65535)という数値です。

> また、0xffffuというのも出てきたのですが、これは何ですか?

整数定数(整数リテラル)の後ろのuまたはUを付けると、その整数は「unsigned」として扱われます。

主に、暗黙の型変換等に影響します。
例えば
1 > -1
は、ともに符号有り整数として扱われ、符号通りに順序付けられて、真になりますが、
1U > -1
は、-1が暗黙の型変換で符号無し整数として扱われ、2の補数表現で0xffffffff(32bitの場合)の符号無し整数となり、1より大きくなるため、この式は偽となります。
    • good
    • 0

0xffff は、1の補数で考えてください。


-1 になります。

数値表現の末尾に "u" が付くと、unsigned で扱われます。
0xffffu は、65535 です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A