0

2の補数の加算に取り組んでいます。基本的に、-27から+31までの加算を示す必要があり、両方の数値は6ビットを使用して2進数になっています。

私の問題はキャリー操作にあります。多分私はそれを正しくやっていないか何かをしていません。

-27はバイナリです:111011
+31はバイナリです:011111

私が思う答えは次のようになります:
+4はバイナリです:000010

これが私がしていることです:

Carry  1 1 1 1 1  
- 27   1 1 1 0 1 1
+ 31   0 1 1 1 1 1
-------------------------
Sum:   0 1 1 0 1 0

私の考えでは、これは4ではなく52に計算されます。

私は何が間違っているのですか?

4

2 に答える 2

3

あなたの数学は間違っています。

27は0 1 1 0 1 12進数です(符号に追加した先行0に注意してください)

-27は1 0 0 0 1 12の補数です。

これを使って計算すると、正しい結果が得られるはずです。


これは、2の補数をすばやく実行するための「トリック」です。

LSBから始めて、最初のゼロに遭遇するまで正確に数値をコピーしてから、そのゼロもコピーします。その後、MSBまですべてのビットを反転します。

これは、すべてのビット(1の補数)を反転して1を追加する(2の補数に変換する)のと同じですが、1つのステップだけです。

于 2011-08-29T05:06:08.010 に答える
1

うーん、、31 - 27 = 4正解です!:)

4 is 100バイナリでは、しかし、あなたはそれを確信していますか-27 is 111011

于 2011-08-29T05:07:03.740 に答える