アプリ版:「スタンプのみでお礼する」機能のリリースについて

-8を2進数で表すと111111111・・・000となるのはなぜですか?

A 回答 (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となります。
    • good
    • 0
この回答へのお礼

ありがとうございました。
マイナスの場合は1を足すのが基本なのでしょうか?

お礼日時:2005/10/25 18:03

今度は16ビットで考えてみます。


8と8のビットを反転させたものを足すと
 0000000000001000・・・8
+)1111111111110111・・・8のビットを反転させたもの
-----------------------------------------------
1111111111111111
これに1を足すと
10000000000000000
になります。16ビット有効なので、この結果の先頭の1は無視されます。そうすると
0000000000000000 すなわち0です。
"8"と"8を反転させて足したもの"に"1"を足したら0になったので、ある正数のマイナスを求める場合は、
「反転させて1を足す」
となります。
    • good
    • 0

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:http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C …
    • good
    • 0
この回答へのお礼

ありがとうございました。URL参考にさせていただきます。

お礼日時:2005/10/25 18:02

それは


-8 = ~8+1
だからです。
    • good
    • 0
この回答へのお礼

1足すのですね。

お礼日時:2005/10/25 17:58

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