0

皆さん、私はまだ 2 の補数演算のコツをつかもうとしていますが、解決策を使って練習問題に取り組んでいるので、正しい答えを得ることができます。

2 進法で答えた場合、2 の補数を適用して数値を加算する前に、それを 10 進数の答えと同一視することができないようです。

000100-111001 10 進数では 4 - 57= -53

なる

0001000+000111 は 4 + (-57) になりますか?

001011 の解を与える

001011 が -53 に等しいことをどのように証明できますか?

ありがとう!

4

1 に答える 1

1

あなたの質問に答えるために、最初の 001011 は -53 と等しくありません。これは間違った答えです。最上位ビットは 1 ではなく 0 であるため、正でなければならないことがわかっています。

例として、4 - 57 を実行してみましょう。これは 4 + (-57) と同じです。
2 進数に変換すると (この例では 1 バイトだけを使用します)、4 は 0000 0100、57 は 0011 1001 になります。57を負の 57 に変換するには、2 の補数を使用します
。 0111
したがって、次の式が得られます。

  0000 0100
+ 1100 0111
------------
  1100 1011 

行を足し合わせるだけで答えが得られます。得られた答えは 1100 1011 です。最上位ビット (ここでは一番左) が 1 であるため、負であることがわかります。その大きさを見つけるために、2 の補数を適用します
。1. 否定: 0011 0100
2. 1 を追加します。 0011 0101
これは 10 進法の 53 に等しい。

それが正しいかどうかを確認する別の方法は、数値の正のバージョンを追加することです。

  1100 1011
+ 0011 0101
------------
 10000 0000

2 の補数は 2^n (n はビット数) から減算される数として定義されるため、常にこの合計の結果が得られます。1 の桁をたたき落とすと、残ったものが 0 になるのは興味深いことです。また、任意の数とその負数を足すと 0 になります。

于 2013-03-27T01:28:18.637 に答える