- ベストアンサー
ビットシフト演算子について
-8を2進数で表すと111111111・・・000となるのはなぜですか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
簡単のために8ビットでやってみます。 8は2進数だと 00001000 ですよね。 8 + (-8) = 0 なので、 00001000 + (?) = 00000000 になる?の部分が-8に なるわけです。 で、2進数で表した8である 00001000のビットを反転させると 11110111ですね。これらを足すと 00001000 + 11110111 = 11111111 になります。この両辺に00000001を足すと 00001000 + (11110111 + 00000001) = (11111111 + 00000001) 00001000 + 11111000 = 100000000 となります。8ビットで表現しているので、 右辺の100000000の先頭1ビットは無視されて、 00000000すなわち0になります。要するに、 00001000(10進の8) + 11111000(10進の-8) = 00000000(10進の0) というわけで、11111000が-8という事になります。 これの求め方は2進数で表した8のビットを反転させて1を足せば良い事になります。 00001000(10進の8) 反転させて 11110111 1足して 11111000 これが-8となります。
その他の回答 (3)
- yamada46
- ベストアンサー率39% (13/33)
今度は16ビットで考えてみます。 8と8のビットを反転させたものを足すと 0000000000001000・・・8 +)1111111111110111・・・8のビットを反転させたもの ----------------------------------------------- 1111111111111111 これに1を足すと 10000000000000000 になります。16ビット有効なので、この結果の先頭の1は無視されます。そうすると 0000000000000000 すなわち0です。 "8"と"8を反転させて足したもの"に"1"を足したら0になったので、ある正数のマイナスを求める場合は、 「反転させて1を足す」 となります。
- sha-girl
- ベストアンサー率52% (430/816)
10進数の-1が2進数(32bit:int)だと (1111 1111 1111 1111 1111 1111 1111 1111)・・・-1 って事はわかっているでしょうか? もしわからないのであれば 「2の補数」で検索してると良いでしょう。 何故そうやって表すかですが 2の補数でデータを持っていると 足し算(引き算)を扱いやすいのです。 例えば-8 + 7だと 1111 1111 1111 1111 1111 1111 1111 1000・・・-8 0000 0000 0000 0000 0000 0000 0000 0111・・・-7 を足すと 1111 1111 1111 1111 1111 1111 1111 1111・・・-1 「2の補数」を使えば符号に関係なく そのまま、足す事ができるのです。
お礼
ありがとうございました。URL参考にさせていただきます。
- 3rate-engineer
- ベストアンサー率45% (5/11)
それは -8 = ~8+1 だからです。
お礼
1足すのですね。
お礼
ありがとうございました。 マイナスの場合は1を足すのが基本なのでしょうか?