質問

私はコンピュータ システム コースに通っており、 もがく, 、部分的に、と 2の補数. 。それを理解したいのですが、これまで読んだものすべてが私には理解できませんでした。を読みました ウィキペディアの記事 およびその他のさまざまな記事を含む 私の教科書.

そこで、これを始めようと思ったのですが、 コミュニティウィキ 2 の補数とは何か、その使用方法、およびキャスト (符号付きから符号なしへ、またはその逆)、ビット単位の演算、ビット シフト演算などの演算中に 2 の補数が数値にどのような影響を与えるかを定義するために投稿します。

私が期待しているのは 明確かつ簡潔な定義 それはプログラマーにとっては簡単に理解できます。

役に立ちましたか?

解決

2 の補数は整数を格納するための賢い方法であり、一般的な数学の問題を非常に簡単に実装できます。

理解するには、数値を 2 進数で考える必要があります。

それは基本的に言う、

  • ゼロの場合はすべて 0 を使用します。
  • 正の整数の場合は、最大 2 までカウントアップを開始します(ビット数 - 1)-1.
  • 負の整数の場合もまったく同じことを行いますが、0 と 1 の役割を入れ替えます (つまり、0000 から始める代わりに 1111 から始めます。これが「補数」の部分です)。

4 ビットのミニバイト (これを と呼びます) で試してみましょう。 かじる - 1/2 バイト)。

  • 0000 - ゼロ
  • 0001 - 1つ
  • 0010 - 二
  • 0011 - 三つ
  • 01000111 - 4時から7時まで

ポジティブに考えられるのはそれくらいです。23-1 = 7.

否定的な場合:

  • 1111 - マイナスのもの
  • 1110 - マイナス 2
  • 1101 - マイナス 3
  • 11001000 - マイナス 4 ~ マイナス 8

負の場合は 1 つの追加の値が得られることに注意してください (1000 = -8) ポジティブな場合はそうではありません。それの訳は 0000 ゼロに使用されます。これは次のように考えることができます 数直線 コンピュータの。

正の数と負の数を区別する

これにより、最初のビットは正と負の 10 進数値を区別するために使用できるため、「符号」ビットの役割を果たします。最上位ビットが 1, の場合、バイナリは負であると言えます。ここで、最上位ビット (左端) が 0, 、小数値が正であることを識別すると言えます。

「1 の補数」の負の数は、符号ビットを反転するだけで、0 からカウントされます。しかし、このアプローチは通訳に対処する必要があります 1000 「マイナスゼロ」と表記されますが、これは紛らわしいです。通常、これについて心配する必要があるのは、ハードウェアの近くで作業する場合のみです。

他のヒント

ウィキペディアの記事よりもうまく説明できないだろうか。

2 の補数表現で解決しようとしている基本的な問題は、負の整数を格納する問題です。

まず、4 ビットに格納された符号なし整数を考えます。以下のものを使用できます

0000 = 0
0001 = 1
0010 = 2
...
1111 = 15

これらは、負であるか正であるかを示すものがないため、符号なしです。

符号の大きさと過剰表記

負の数を保存するには、さまざまな方法を試すことができます。まず、最初のビットを +/- を表す符号ビットとして割り当て、残りのビットを大きさを表す符号絶対値表記を使用できます。したがって、再び 4 ビットを使用し、1 が - を意味し、0 が + を意味すると仮定すると、次のようになります。

0000 = +0
0001 = +1
0010 = +2
...
1000 = -0
1001 = -1
1111 = -7

それで、そこに問題があることが分かりましたか?正の 0 と負の 0 があります。より大きな問題は、2 進数の加算と減算です。符号の大きさを使用して加算および減算を行う回路は非常に複雑になります。

とは

0010
1001 +
----

?

もう一つのシステムは、 過剰な表記. 。負の数を保存でき、ゼロが 2 つある問題は解決されますが、足し算と引き算は難しいままです。

そこで、2の補数が登場します。これで、正と負の整数を保存し、比較的簡単に算術演算を実行できるようになりました。数値を 2 の補数に変換する方法は多数あります。ここに 1 つあります。

10 進数を 2 の補数に変換する

  1. 数字をバイナリに変換します(今の標識を無視してください)5 は 0101、-5 は 0101

  2. 数値が正の数であれば、作業は完了です。例えば5 は、2 の補数表記を使用した 2 進数の 0101 です。

  3. 数値が負の場合は、

    3.1補体(反転0と1を反転)を見つける-5 は 0101 なので、補数を見つけると 1010 になります。

    3.2 補数 1010 + 1 = 1011 に 1 を加算します。したがって、2 の補数の -5 は 1011 になります。

では、2 進数で 2 + (-3) を実行したい場合はどうすればよいでしょうか?2 + (-3) は -1 です。これらの数値を加算するために符号の大きさを使用する場合、何をする必要があるでしょうか?0010 + 1101 = ?

2 の補数を使用すると、それがどれほど簡単になるかを考えてみましょう。

 2  =  0010
 -3 =  1101 +
 -------------
 -1 =  1111

2 の補数を 10 進数に変換する

1111 を 10 進数に変換すると、次のようになります。

  1. この数値は 1 から始まるため負であるため、1111 の補数である 0000 を求めます。

  2. 0000に1を加えると0001になります。

  3. 0001 を 10 進数に変換すると 1 になります。

  4. 符号 = -1 を適用します。

タダ!

私がこれまで見てきたほとんどの説明と同様、上記の説明は 2 の補数の使い方については明確ですが、それが何を意味するのかについては実際には説明していません。 数学的に。少なくとも整数についてはそれを試してみます。最初に、おそらくよく知られている背景について説明します。

10 進数の場合の動作を思い出してください。
  2345
書き方です
  2 × 103 + 3 × 102 + 4 × 101 + 5 × 100.

同様に、バイナリは、次の要素だけを使用して数値を記述する方法です。 0 そして 1 同じ一般的な考え方に従いますが、上の 10 の部分を 2 に置き換えます。次にバイナリでは、
  1111
書き方です
  1 × 23 + 1 × 22 + 1 × 21 + 1 × 20
計算してみると、それは 15 (10 進数) に等しいことがわかります。それはそうだからです
  8+4+2+1 = 15.

正の数の場合はこれで問題ありません。人間が 10 進数で行うように、負の数の前にマイナス記号を付けるだけであれば、負の数でも機能します。それは一種のコンピュータでも実行できますが、私は 1970 年代初頭以来、そのようなコンピュータを見たことがありません。理由については別の議論に譲ります。

コンピュータの場合、 補体 負の数の表現。そして、ここで見落とされがちなことがあります。補数表記には、通常の正の数の前にある暗黙のゼロも含め、数値の桁の何らかの逆転が含まれます。それは厄介です、なぜなら次のような疑問が生じるからです。全部?考慮すべき桁数は無限になる可能性があります。

幸いなことに、コンピューターは無限を表現しません。数値は特定の長さ (または必要に応じて幅) に制限されます。それでは、特定のサイズを持つ正の 2 進数に戻りましょう。これらの例では 8 桁 (「ビット」) を使用します。したがって、実際の 2 進数は次のようになります。
  00001111
または
  0 × 27 + 0 × 26 + 0 × 25 + 0 × 24 + 1 × 23 + 1 × 22 + 1 × 21 + 1 × 20

負の 2 の補数を形成するには、まずすべての (2 進) 桁を補数して形成します。
  11110000
フォームに 1 を追加します
  11110001
しかし、それが -15 を意味するとどう理解すればよいでしょうか?

答えは、上位ビット (一番左のビット) の意味を変更することです。このビットは 1 すべての負の数に対して。変更は、それが表示される数値の値に対する寄与の符号を変更することです。それで今私たちの 11110001 を表すと理解されています
  -1 × 27 + 1 × 26 + 1 × 25 + 1 × 24 + 0 × 23 + 0 × 22 + 0 × 21 + 1 × 20
式の前に「-」があることに注意してください。これは、符号ビットの重みが -2 であることを意味します。7, 、つまり -128 (基数 10) です。他のすべての位置は、符号なし 2 進数での重みと同じ重みを保持します。

-15 を計算すると、
  -128 + 64 + 32 + 16 + 1
電卓で試してみてください。-15です。

コンピューターで負の数を表現する主な方法は 3 つありますが、一般的な使用では 2 の補数が最も便利です。ただし、奇妙な点があります。バイナリであるため、可能なビットの組み合わせは偶数個存在する必要があります。それぞれの正の数は負の数と組み合わせることができますが、ゼロは 1 つだけです。ゼロを否定するとゼロになります。もう 1 つの組み合わせがあります。 1 符号ビットと 0 他のどこでも。対応する正の数は、使用されているビット数に収まりません。

この数字のさらに奇妙な点は、1 を補ったり足したりして正の数を形成しようとすると、同じ負の数が戻ってくることです。ゼロがこれを行うのは自然なことのように思えますが、これは予期せぬことであり、私たちが慣れている動作とはまったく異なります。なぜなら、コンピューターは別として、私たちは一般にこの固定長の算術演算ではなく、無制限に供給される桁について考えているからです。

これは奇妙なことの氷山の一角のようなものです。水面下ではさらに多くのことが待ち構えていますが、この議論ではこれで十分です。固定小数点演算の「オーバーフロー」を研究すると、おそらくさらに多くのことが見つかるでしょう。本気で取り組みたい場合は、「剰余算術」を研究することもできます。

2 の補数はバイナリの値を見つけるのに非常に便利ですが、私はそのような問題を解決するもっと簡潔な方法を考えました (他の人がそれを公開しているのを見たことがありません)。

バイナリを例に挙げます。1101 これは [スペース "1" が符号であると仮定して] 以下に等しい -3.

2 の補数を使用してこれを実行します...1101 を 0010 に反転...0001 + 0010 を加算 ===> すると 0011 になります。正の 2 進数の 0011 = 3。したがって、1101 = -3!

私が気づいたこと:

すべての反転と加算の代わりに、正のバイナリ (0101 としましょう) を解くための基本的な方法を実行するだけで済みます。3 * 0) + (22 * 1) + (21 * 0) + (20 * 1) = 5.

まったく同じコンセプトをネガティブで実行します!(少しひねりを加えて)

たとえば 1101 を例に挙げます。

2の代わりに最初の数字を表す3 * 1 = 8 、してください -(23 * 1) = -8.

その後、通常どおり続行して、 -8 + (22 * 1) + (21 * 0) + (20 * 1) = -3

あなたはビット/トリット/数字/何の有限数を持っていることを想像してみてください。あなたは、すべての桁が0であるとして0を定義し、上向きに自然に数えます:

00
01
02
..

最終的にあなたがオーバーフローします。

98
99
00

私たちは、2桁の数字を持っているし、すべてのこれらの数字が正で0から100までのすべての数字を表すことができます!我々はあまりにも負の数を表現するとします?

私たちが本当に持っていることはサイクルがあります。 2の前の数字は1の前に番号が0である1である数0である前に... の99

だから、簡単にするために、のは、50以上の任意の数が負であることとしましょう。 "49" は-1である49を介して "99" に0を表すを通じて "0"、 "98"、-2 ... "50" -50である。

この表現はのの 10の補数です。コンピュータが通常使用する代わりに数字のビットを使用する以外は同じであるの 2の補数の、。

10の補数のいいところはほかにがちょうどの作品ということです。あなたは正と負の数を追加するために特別なことをする必要はありません!

二つの補数は、所定数の第1 '補数に1を加えることによって見出されます。 最終的な答えである、10101、つまり、我々はこの結果に01010追加1、つまり、そのものが補完見つけ、その後01010+1=01011の補数を見つけるために持っていると言う。

することができます

私はJNGによってRedditのの上の幻想的な説明を読んで、アナロジーとしての走行距離計を使用して。

 loading=

"ここに画像の説明を入力します。
  

これは便利な慣例です。同じ回路と論理演算います   まだ両方のポジティブに働くバイナリで正の数を追加/減算   それはそうだ理由と負の数の規則を使用している場合、それはです   便利で遍在ます。

     あなたの場合は、

車の走行距離計を想像し、それは99999(例えば)で周りのロール   あなたは00000をデクリメント場合は、00001を取得00000をインクリメントし、あなたは99999を取得します   (ロールアラウンドによる)。あなたは99999に1つのバックを追加した場合、それはに戻り   00000だから、99999が表す-1を決定するために便利です。同様に、99998は-2を表し、というようにすることを決定することは非常に便利です。あなたが持っている   どこかに停止し、また、慣例により、数字の上半分にします   (50000から99999)陰性であるとみなされ、下半分は正で   ただ自分自身(00000から49999)を表します。その結果、トップの数字   5-9あることは示される数が負であることを意味し、それは0-4であります   トップビットとまったく同じ - 表現が正であることを意味し   2の補数2進数で符号を表すます。

     

これは私にとっても大変だった理解します。私はそれを持って、バックに行きましたら、   再読んだ本の記事と解説(ないインターネットがなかったです   当時)、それはそれは本当になかった記述するそれらの多くを判明しました   それを理解する。私は後に本教育アセンブリ言語を記述しませんでした   その(10年間、非常によく売れなかった)。

答え10取得することができます - 8ビットを使用してバイナリ形式で12: 私たちが本当にやりますと、10 +(-12)

であります

私たちは、10からそれを減算するために12の賛辞の一部を取得する必要があります。 バイナリ12は00001100です。 バイナリ10は00001010である。

私達はちょうどその1を追加し、すべてのビットを反転させる12の賛辞の一部を取得します。 逆バイナリ12は、これも逆コード(1の補数)である11110011.あります。 今、私たちは今、11110100である、1を追加する必要があります。

だから、11110100は、12の褒め言葉です!あなたはそれをこのように考えたときに簡単ます。

これは、10の上記の質問解決することができます - 。バイナリ形式の12を

00001010
11110100
-----------------
11111110  

それは本当に理にかなっているビューの数学の観点から、2の補数のシステムを見てみます。 10の補数では、アイデアは、基本的に「分離株」の違いである。

例:63から24 = X

私たちは本当にちょうど( - 24 100)で24の補数を追加します。だから、本当に、私たちがやっているすべては、式の両辺に100を追加することです。

次に式である:100 + 63から24 = X + 100、我々は削除理由は100(または10または1000または任意)

によりゼロの長鎖から1つの数を減算することの不便な状況に、我々は十進法、9の補数で、「減少基数補数システムを使用します。

私たちは、ナインの大きなチェーンから差し引か番号を提示しているとき、私たちはただの数字を逆にする必要があります。

例:99999から03275 = 96724

これはおそらく子供の頃の数学から知っているように9、9の補数の後、我々は1を追加し、その理由は「盗む」1だから基本的には差から1を取るだけで10の補数だことで10になります。

9の補数に1の補数ながら

バイナリでは、2の補数は、10の補数にequatableです。主な違いはなく、10のべき乗との差を分離しようとする我々は2の累乗との差を分離しようとしている(式中へ10、100、等を添加する)ことである。

これは、私たちはビットを反転し、この理由からです。ただ、私たちの被減数は10進数でナインの連鎖がどのように好きで、私たちの被減数がバイナリでのもののチェーンがある。

例:111111から101001 = 010110

ものの鎖が2の素晴らしいパワーを下回る1であるため、

、彼らは「盗む」のは、小数点で行う9のような違いから、1。

私たちが使用している場合は、負の二進数の、私たちは本当にただ言ってます:

0000 - 0101 = X

1111 - 0101 = 1010

+ 0000 1111 - 0101 = X + 1111

私たちは、元の違いにこれを追加しましたので。

1111年が離れて10000から1であり、我々はリード1を削除するために

「隔離」はXにするために、我々は1を追加する必要があります

+ 1 + 0000 1111から0101 = X + 1111 + 1

10000 + 0000から0101 = X + 10000

ただ、それは基本的な代数だ、Xを取得するために、両側から10000を削除します。

答えの多くは、これまでうまく2の補数が負の数を表すために使用されますが、「1」を追加している理由の2の補数は特にありません、何であるかを教えていない、実際には、多くの場合、間違ったで追加された理由を説明道ます。

混乱が補数の定義の理解不足から来ています。補完は、完全なものになるだろう欠落している部分です。

基数Bにおけるn桁数xの基数の補数は、定義、B ^ N-Xによって、です。 バイナリ4に3桁(N = 3)及び2(B = 2)の基数を持つ100によって表しています。そうその基数の補数がB ^であるN-X = 2 ^ 3-4 = 8-4 = 4(またはバイナリ100)。

しかし、バイナリ基数の補数を得ること基数補体よりもわずか1未満(B ^ N-1)-Y、として定義され、その低下基数の補数を取得ほど容易ではありません。減少基数の補数を取得するには、あなたは、単にすべての桁を反転ます。

100 - > 011(減少(自分の)基数の補数)

定義が定義されている

基数(2の)補数を得るために、我々は単に、1を追加します。

011 +1 - > 100(2の補数)

さて、この新しい理解した上で、のは、によって与えられた例のを見てみましょう ヴィンセントRamdhanie(第2の応答上記参照)

/ *ヴィンセントの開始

10進数1111の変換ます:

数が1から始まるので、それは否定的だので、我々は0000である1111年の補数を、見つけます。 0000に1を追加し、我々は0001を得ます。 0001は1である、小数に変換します。 =記号を適用-1。 多田!

ヴィンセントの終わり* /

は、

として理解されるべきです

数が1から始まるので、それは負です。だから我々は、それはいくつかの値xの2の補数である知っています。その2の補数で表さxを求めるには、まずその1の補数を見つける必要があります。

1111:xの

2の補数 xの1の補数:1111-1 - > 1110; X = 0001、(すべての数字を反転)

、と答え= -x = -1 -

記号を適用します。

lavinio の答えは気に入りましたが、ビットをシフトすると複雑さが増します。多くの場合、符号ビットを尊重しながらビットを移動するか、符号ビットを尊重せずにビットを移動するかを選択できます。これは、数値を符号付きとして扱うか (ニブルの場合は -8 ~ 7、バイトの場合は -128 ~ 127)、または全範囲の符号なし数値 (ニブルの場合は 0 ~ 15、バイトの場合は 0 ~ 255) として扱うかの選択です。

このようなデータ・タイプのビットの組み合わせの約半分が負の整数のために予約されている方法、及びにそれらの対応する正の整数結果と負の整数のほとんどの他に負の整数を符号化する巧妙な手段でありますバイナリゼロに結果を残すキャリーオーバーフロー。

一つは0x0001である場合には、(1のオーバーフローを有する)0000の合成和をもたらすため、

そこで、2の補数で、次いで-1、0x1111である。

2の補数:数値の 1 の補数で 1 を追加すると、2 の補数が得られます。例えば:100101 1の補数は011010、2の補数は011010+1 = 011011(1の補数で1を足す) 詳細については この記事ではそれを図で説明しています。

数週間前にも同じ問題がありました。結局、私はそれについてオンラインでさまざまな情報源から読み、断片をまとめ、自分が正しく理解していることを確認するために自分で書きました。2 の補数を使用する理由は主に次の 2 つです。

  1. 0 の複数の表現を避けるには
  2. オーバーフローの場合にキャリー ビット (1 の補数など) を追跡することを避けるため。
  3. 足し算や引き算などの簡単な演算が簡単に行えます。

この件についてより詳細な説明が必要な場合は、私が書いた記事をお試しください ここ. 。それが役に立てば幸い!

単語補完は完全に由来します。小数世界で0〜9の数字は、すべての小数を表現するために数字または数字記号のの補完の(完全なセット)を提供します。バイナリ世界で符号0,1はのすべてのバイナリ数を表現する数字のの補完を提供します。実際には、シンボル0及び1がすべて(テキスト、画像、など)ならびに陽性(0)と負(1)を表すために使用されなければなりません。 私たちの世界では数の左に空白がゼロと見なされます:

                  35=035=000000035.

は、コンピュータ記憶場所に空白スペースがありません。全てのビット(二進数字)は、効率的に8ビット、16ビット、32ビット、64ビット、128ビット表現として格納することができるメモリ番号を使用する0または1のいずれかでなければなりません。 8ビット数として記憶されている番号は16ビット位置に転送されると、符号と大きさ(絶対値)が同じままでなければなりません。 1の補数と2の補数表現の両方がこれを容易にします。 名詞として: 1の補数と2の補数の両方が最上位ビット(左のもの)の符号ビットである符号付き量のバイナリ表現です。 0は正のためであり、1は負のためのものです。 を2の補数は、負のを意味するものではありません。これは、署名された量を意味します。小数のように大きさが正の量として表されます。構造は、[]より多くのビットを有するレジスタに促進する場合量を維持するために符号拡張を使用します:

       [0101]=[00101]=[00000000000101]=5 (base 10)
       [1011]=[11011]=[11111111111011]=-5(base 10)

動詞として: 2の補数手段の否定します。これは、負作るという意味ではありません。マイナスがプラスにする場合、それは意味します。正メイク負の場合。大きさは絶対値である。

        if a >= 0 then |a| = a
        if a < 0 then |a| = -a = 2scomplement of a

この機能は、追加し否定用いて効率的にバイナリ減算を可能にします。             A - B = A +(-b)

1の補数を取るために公式の方法は、1からその値を差し引き、各桁用です。

        1'scomp(0101) = 1010.

これは、個別に各ビットを反転または非反転と同じです。これは、ウェル1の補数は、問題を取り除くしteに1を加えそれほど愛されていない負のゼロになります。 2Sを無効にするか、活用するためには、1秒1を追加します。

その後、補完取る最初の補完します
        Example 1                             Example 2
         0101  --original number              1101
         1's comp  1010                       0010
         add 1     0001                       0001
         2's comp  1011  --negated number     0011

の例で否定は符号拡張番号と同様に動作します。

の追加:
        1110キャリー111110キャリー          0110は000110と同じです          1111 111111     合計0101合計000101

差し引くます:

    1110  Carry                      00000   Carry
     0110          is the same as     00110
    -0111                            +11001
  ----------                        ----------
sum  0101                       sum   11111

2の補数で作業する場合、番号の左に空白が正の数のためにゼロで満たされていることに注意してくださいは、負の数のためのもので満たされbutis。キャリーは常に追加され、1または0のいずれかである必要があります。

乾杯

REFERENCE:ます。https://www.cs.cornell。 EDU /〜tomf /ノート/ cps104 / twoscomp.htmlする

私はすべてのビットを反転し、プログラム1を追加します:

  // in C++11
  int _powers[] = {
      1,
      2,
      4,
      8,
      16,
      32,
      64,
      128
  };

  int value=3;
  int n_bits=4;
  int twos_complement = (value ^ ( _powers[n_bits]-1)) + 1;

与えられた数の2の補数はnoです。なしの1の補数との1を追加することによって得ました。 我々はバイナリノーを持っている、と仮定:10111001101 それは1の補数である:01000110010 そして、それは2の補数になります:01000110011

数を補完ビット単位へのすべてのビットを反転することです。 2のために、我々はすべてのビットを反転して1を追加し、それを補完ます。

の符号付き整数の2の補数表現を使用して、我々はその負同等とその逆に正の数を変換するために、2の補数演算を適用します。そう例えばニブルを使用して、0001(1)〜(-1)と再度OPを適用する、1111に戻り0000なります。

ゼロの動作の挙動は、正および負のゼロの特別な処理なしにゼロのための単一の表現を与える点で有利です。 0001 + 1111 1が添加された場合、<=>する補完。むしろ、正と負のものよりも、私たちに1つのゼロを与え、<=>するオーバーフローします。

この表現の重要な利点は、それらに適用された場合、符号なし整数の標準加算回路が正しい結果を生成することです。例えば、ニブル1および-1を加算:<=>、レジスタのうちのビットのオーバーフローを、<=>残します。

穏やか概要については、素晴らしいComputerphileは、件名にビデオを制作しているにます。

2の補数は、本質的にバイナリ数の加法逆数を考え出すの方法です。自分でこれを確認する:バイナリ形式で数を考えると、元の数に加えられた場合、結果はゼロになるだろうどのようなビットパターン、?あなたは、このビットパターンを考え出すことができる場合は、そのビットパターンは、元の数の-ve表現(反数)です。定義によると、その反数に番号を追加することは常にゼロになるはずです。例:5.今タスクが与えられたビットパターン(101)に追加のビットパターンを思い付くことである10進数の101を取るはゼロをもたらすであろう。これを行うには、101の一番右のビットから開始して、個々のビットのために、再び同じ質問尋ねる:私は「この」ビットは結果をゼロにするために追加する必要がありますどのようなビットを?アカウントに通常のキャリーオーバーを取ることをやって続けています。我々は3つの右のほとんどの場所(先行ゼロを考慮せずに、元の数を定義桁)で行われた後、最後のキャリーは、反数のビットパターンになります。我々は、単一のバイトと言うの元の数に保持することができるので、加法逆数内の他のすべての先行ビットも1つのなければならないコンピュータ「は、」ストレージタイプ(CHAR)を使用して数とその反数を追加するとなるようにその文字の結果がすべてゼロになります。

 1 1 1
 ----------
   1 0 1
 1 0 1 1 ---> additive inverse
  ---------
   0 0 0

また、小数の2の補数バイナリ表現を計算するために、オンライン計算機を使用することができます: http://www.convertforfree.com/twos-complement-calculator/する

最も簡単な答えます:

1111 + 1 =(1)0000。だから、1111は-1でなければなりません。次いで、-1 + 1 = 0。

これは私のためにこれらのすべてを理解することが最適です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top