5

Nビットで表される数の2の補数は、2^N-numberです。
例:数値が7(0111)で、4ビットを使用して表現している場合、2の補数は(2 ^ N-数値)、つまり(2 ^ 4 -7)= 9(1001)になります。

7==> 0111
1's compliment of 7==> 1000
1000
+  1
-------------
1001 =====> (9)

数値の2の補数を計算する際に、次の手順を実行します。1.数値の1の補数を実行します。2。手順1の結果に1を加算します。

否定演算を行っているので、数値の補数を計算する必要があることを理解しています。しかし、なぜ1を追加するのですか?

これはばかげた質問かもしれませんが、私は論理を理解するのに苦労しています。上記の例(番号7)で説明するために、1の補数を実行して-7を取得し、次に+1を追加します。したがって、-7 + 1 = -6ですが、それでも正しい答え、つまり+9を取得しています。

4

4 に答える 4

12

あなたの誤りは「私たちは自分の褒め言葉をして-7を得る」にあります。これが間違っている理由を確認するには、7の補数を取り、それに7を追加します。-7の場合、-7 + 7 = 0であるため、ゼロになるはずです。そうはなりません。

7の補数はでした1000。これに7を加えると、が得られ1111ます。間違いなくゼロではありません。ゼロにするには、もう1つ追加する必要があります。

数値の負の数は、ゼロを取得するために加算する必要のある数値です。

に追加1すると...11111、ゼロになります。したがって、-1はすべて1ビットとして表されます。

たとえばx、1の補数に数値を追加すると、 ~x1ビットすべてが得られます。

したがって:
〜x + x = -1

両側に1を追加します:
〜x + x + 1 = 0

両側からxを引く:
〜x + 1 = -x

于 2013-02-12T13:43:17.863 に答える
5

+1は、テクニックのキャリーオーバーが処理されるように追加されます。

7と-7の例を見てください。

あなたが7を表す場合00000111

-7を見つけるために:

すべてのビットを反転して1つ追加します

11111000 -> 11111001

これで、次の標準的な数学ルールを追加できます。

  00000111
+ 11111001
 -----------
  00000000

コンピュータの場合、基本的にビットごとに比較して1つ運ぶ必要があるため、この操作は比較的簡単です。

代わりに、-7を10000111として表した場合、これは意味がありません。

   00000111
+  10000111
  -----------
   10001110 (-14)

それらを追加するには、最初のビットの分析や値の変換など、より複雑なルールを使用します。

より詳細な説明はここにあります。

于 2013-02-12T13:51:34.960 に答える
1

簡単な答え:追加しない場合1は、数値の2つの異なる表現があります0

より長い答え: 1の補数で

  • からの値はからまでの数値00000111表します07

  • からの値はからまでの数値11111000表します0-7

    • それらの逆はとである0000ため0111

問題があります。今、同じ番号を書く2つの異なる方法があり、両方とも00001111表し0ます。

これらの逆数に1を加えると、からの数になり、0001それ1000を表すため、重複を避けることができます。-1-8

于 2019-07-12T22:23:03.887 に答える
0

私はタイトルが何を求めているのかを直接答えるつもりです(申し訳ありませんが、詳細は、ビットを反転して追加することがどこから来るのかを理解するほど一般的ではありません)。

まず、2の補数を使って標準(小学校)の算術演算を実行できるという事実を思い出して、2の補数を動機付けましょう(つまり、数字を足したり、持ち越したりするなど)。計算のしやすさがこの表現の動機になっています(減算を加算とは異なる方法で実装した場合、加算を行うのは2つではなく1つのハードウェアのみであり、小学校の加算では異なる方法で減算することを意味します)。

ここで、例として、この形式の2つの補数の各桁といくつかの2進数の意味を思い出してください(MITの6.004コースから借用したスライド)。

ここに画像の説明を入力してください

ここで、算術演算は通常どおりに機能し、符号は2の補数自体の2進数に含まれていることに注意してください。特に次の点に注意してください。

1111....1111 + 0000....1 = 000....000 すなわち -1 + 1 = 0

この事実を使用して、2の補数表現がどうあるべきかを導き出してみましょう-A。したがって、解決すべき問題は次のとおりです。

Q:2の補数の表現が与えられた場合、2の補数Aの表現は何-Aですか?

これを行うために、私たちが知っている値を使用していくつかの代数を実行しましょう:

A + (-A) = 0 = 1 + (-1) = 11...1 + 00000...1 = 000...0-A次に、主題を2の補数で表される数で表現して みましょう。-A = 1 + (-1 - A) = 000.....1 + (111....1 - A) ここAで、は2の補数です。したがって、計算する必要があるのは、2の補数形式で-1とAを減算することです。そのために、数値がその基数の線形結合としてどのように表されるかに注目してください(つまり2^i):

1*-2^N-1 + 1 * 2^N-1 + ... 1 = -1

a_N * -2^N-1 + a_N-1 * 2^N-1 + ... + a_0 = A

--------------------------------------------- (subtract them)

a_N-1 * -2^N-1 + a_N-1 -1 * 2^N-1 + ... + a_0 -1 = A

これは基本的に、対応する値の各桁を減算することを意味します。これにより、ビットが反転するだけで、次のようになります。

-A = 1 + (-1 - A) = 1 + ~ A

~ビットフリップはどこにありますか。これが、ビットフリップして1を追加する必要がある理由です。


述べる:

私に役立ったコメントは、補数は逆に似ているが、0それを与える代わりに2^N(定義上)たとえば、必要な数に3ビットを与えるということだAと思います。少なくとも、それは、との意味を逆にするだけではないので、ここで「補完」という言葉が何を意味すると思われるかを明確にします。A+~A=2^N010 + 110 = 1000 = 82^301


2の補数が何であるかを忘れた場合は、おそらくこれが役立ちます。「2の補数」とは何ですか。


いつか読みたいと思っているコーネルの答え:https ://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html#whyworks

于 2020-09-15T20:54:49.143 に答える