• ベストアンサー

ビット反転について疑問

i = 3; i = ~i; i = -i; i はいくつになるか。 答えは4らしいのですが、どうしてそうなるのかわかりません。 3は2進数で0011、ビット反転して1100、これに-をつけて-4になると思うのですが、どこが違うのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#49664
noname#49664
回答No.2

3 → 00000000000000000000000000000011 ~3 → 11111111111111111111111111111100 → -4 -(-4) = 4 ・・・というわけで、4になります。(Javaの場合、int = 32bitなので32bitで書いてあります) おそらく、マイナスの値のビット状況を勘違いしているのではないでしょうか。intは1ビット目が0ならば正の数、1ならば負の数となります。負の数の場合、以下のようになります。 -1:11111111111111111111111111111111 -2:11111111111111111111111111111110 -3:11111111111111111111111111111101 -4:11111111111111111111111111111100 -5:11111111111111111111111111111011 ・・これで、なんとなくわかりますか??

tochanx
質問者

お礼

わかりました。ありがとうございました。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2の方の説明通りです 実際に試してみるといいかも public class Sample { public static void main(String argv[]){ int i=3; System.out.println(i+":"+Integer.toBinaryString(i)); i=~i; System.out.println(i+":"+Integer.toBinaryString(i)); i=-i; System.out.println(i+":"+Integer.toBinaryString(i)); } }

tochanx
質問者

お礼

ありがとうございます。試してみます。

回答No.1

補数を考慮していますか? Windowsの電卓でやってみると視覚的にはわかりやすいかも。

tochanx
質問者

お礼

補数を考慮していませんでした。 電卓ですが、こんなに使えるものがWindowsに付属していたなんて驚きでした… どうもありがとうございました。

関連するQ&A