- 締切済み
NOT演算
~=NOT演算 Javaプログラムで 44をNOT演算で実行すると-45 という結果が得られますが、なぜそのようになるのかがわかりませんので教えてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- ProKaseifu
- ベストアンサー率51% (98/192)
#3さんが解説しているとおりですね。 最近の学生さんはビット演算や2の補数とかは習わないのでしょうか?
- x_jouet_x
- ベストアンサー率68% (162/236)
NOT演算とはビット演算の1つで、各ビットを反転する演算です。 ビット演算を理解するには2進数を理解していないといけませんが・・・。 1バイト(8ビット)の範囲は、 0111 1111 (10進数だと127) 0111 1110 (10進数だと126) … 0000 0000 (10進数だと0) … 1000 0001 (10進数だと-127) 1000 0000 (10進数だと-128) になります。 ちなみに先頭の "1" は負の符号(-)を表します。まあ、符号なしっていうのもありますが・・・。 さて、質問にある44という数値は上記の書き方だと "0010 1100" になります。 NOT演算はビットを反転する(0は1に、1は0になります)ので、NOT演算を行うと "1101 0011" になります。これは10進数では-45になります。 なぜ"0010 1100"が10進数だと44、"1101 0011"が10進数だと-45になるかはご自分でお調べ下さい。
- ProKaseifu
- ベストアンサー率51% (98/192)
「00101100」 は10進数でいくつでしょう?
- Tasuke22
- ベストアンサー率33% (1799/5383)
Javaがどうしているかは知りませんが、質問の内容を 読む限り、全てのビットを反転しているのだと思いま すけど。 全てのビットを反転すると プラスの場合、マイナスにして-1 マイナスの場合、プラスにして-1 になります。マイナスが2の補数だからです。
補足
44ですよね?