- ベストアンサー
ビット反転について疑問
i = 3; i = ~i; i = -i; i はいくつになるか。 答えは4らしいのですが、どうしてそうなるのかわかりません。 3は2進数で0011、ビット反転して1100、これに-をつけて-4になると思うのですが、どこが違うのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
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 ・・これで、なんとなくわかりますか??
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#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)); } }
お礼
ありがとうございます。試してみます。
- pcbeginner
- ベストアンサー率46% (261/560)
補数を考慮していますか? Windowsの電卓でやってみると視覚的にはわかりやすいかも。
お礼
補数を考慮していませんでした。 電卓ですが、こんなに使えるものがWindowsに付属していたなんて驚きでした… どうもありがとうございました。
お礼
わかりました。ありがとうございました。