したがって、2の補数の2進表記を使用して-7と-7を足し合わせたいとしましょう。私はこれを試しました:
-7 -> -00000111 -> 11111001
1 1 1 1 1 0 0 1
+ 1 1 1 1 1 0 0 1
__________________
1 0 0 0 0 0 0 1 0
しかし、余分な数字を削除すると、11110001=14ではなく00000010=2になります。何が間違っていたのでしょうか。
したがって、2の補数の2進表記を使用して-7と-7を足し合わせたいとしましょう。私はこれを試しました:
-7 -> -00000111 -> 11111001
1 1 1 1 1 0 0 1
+ 1 1 1 1 1 0 0 1
__________________
1 0 0 0 0 0 0 1 0
しかし、余分な数字を削除すると、11110001=14ではなく00000010=2になります。何が間違っていたのでしょうか。
ラインのどこかで、キャリーフラグを失いました(そして失い続けました):
+- Here, 1 + 1 = 0 and sets carry to 1
| (everything up to here isokay).
v
1 1 1 1 1 0 0 1
+ 1 1 1 1 1 0 0 1
__________________
1 1 1 1 1 0 0 1 0
| | | ^ ^
| | | | |
| | | | +- Here, 1 + 1 + carry(1) is 1, not 0.
| | | +--- Ditto.
| | +----- And again.
| +------- Now it's just getting tedious.
+--------- Lastly, here is the final carry, just discard.
否定11110010
(ビットを反転して1を加算)すると00001110
、間違いなく14(8 + 4 + 2)になります。
あなたの数学は間違っています。位置5に1+1を追加すると、10になるので、1をキャリーします。次の列で、1 + 1 +キャリー、= 11 =1+キャリーを追加する必要があります。
これを考慮に入れると、1 1 1 1 0 0 1 0=-14になります。