私はタイトルが何を求めているのかを直接答えるつもりです(申し訳ありませんが、詳細は、ビットを反転して追加することがどこから来るのかを理解するほど一般的ではありません)。
まず、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^N
010 + 110 = 1000 = 8
2^3
0
1
2の補数が何であるかを忘れた場合は、おそらくこれが役立ちます。「2の補数」とは何ですか。
いつか読みたいと思っているコーネルの答え:https ://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html#whyworks