5

X = 01001001 および Y = 10101010

これらを足し合わせたい場合、どうすればいいですか? それらは「2 の補数」です... いろいろ試してみましたが、さまざまな種類のルールがあるように見えるため、正しい答えが得られるかどうかはよくわかりません。

それが正しいことを確認したいだけです: 1. 負の数を変換
しないで、それらをそのまま追加します f.eks 01001001+10101010 = 11110011 => 00001100 => 1101 => -13 それとも? 1. マイナスを変換する 2. それらを足し合わせてマイナスを変換する f.eks 01001001+10101010 => 01001001 + 01010110 => 10011111 => 01100001 => -97 したがって、基本的に私がやりたいことは、XY、および X を取ることです。 +Y














誰かがそれを行う方法を教えてもらえますか?

いくつかのリソース サイト: Student-Binary celtickane swarthmore

4

4 に答える 4

14

2 の補数の優れた点は、バイナリ レベルではアルゴリズムではなく解釈の問題であることです。2 つの符号付き数値を加算するためのハードウェアは、符号なし数値の場合と同じです (フラグ ビットは無視されます)。

あなたの最初の例 - 「それらを追加するだけ」 - はまさに正しい答えです。あなたの例の数字

  • 01001001 = 73
  • 10101010 = -86

したがって、正解は確かに -13 です。

減算は、2 の補数に特別な処理を必要としないという点でまったく同じです。「減算するだけ」です。

興味深いのは、オーバーフロー/アンダーフロー ビットの処理です。73 - (-86) の結果を 8 ビットの 2 の補数として表すことはできません...

于 2008-12-06T21:28:30.620 に答える
1

2 の補数を理解していることを確認するために、正の数から負の数 (またはその逆) に変換します。各ビットを反転し、結果に 1 を追加します。

たとえば、正の数 X = 01001001 は負の数として 10110101+1=10110110 になります。負の数 Y = 10101010 は、正の数として 01010101+1=01010110 になります。

X から Y を減算するには、Y を否定して加算します。IE 01001001 + 01010110。

于 2008-12-06T22:23:21.147 に答える
1

2 の補数の加算では、2 つの引数の符号が反対の場合、特別な処理は必要ありません。バイナリで通常行うようにそれらを追加するだけで、結果の符号は保持する符号です。

于 2008-12-06T21:28:00.777 に答える
1

あなたの混乱は、関連する数字の幅が原因である可能性があります. これをよりよく理解するには、符号なし整数から符号付き整数を作成してみてください。

符号なし整数の MSB がすでに 0 の場合、符号付きとして読み取って同じ結果を得ることができます。
MSB が 1 の場合、左側に 0 を追加して符号付きの数値を取得できます。すべての符号付き数値を符号拡張 (つまり、MSB が 0 の場合は 0 を追加し、MSB が 1 の場合は 1 を追加) して、同じ幅の数値を取得し、算術演算を「通常どおり」実行できるようにする必要があります。

たとえば、数字を使用して:

X = 01001001: 符号なし、MSB は 0、何もしません。

Y = 10101010: 署名済み、X で何もしない、まだ何もしない。

しかし、X の MSB を 1 に変更すると、次のようになります。

X = 11001001: 符号なし、MSB が 1、0 を追加 --> 011001001

Y = 10101010: 符号付き、拡張 X なので、符号拡張 Y --> 110101010

これで、既に知っている方法で加算または減算できる 2 つの符号付き数値が得られました。

于 2008-12-07T14:40:51.487 に答える