Frage

Ich bin in einem Computersystem Kurs und haben kämpfen , teilweise mit Zweierkomplement . Ich will es verstehen, aber alles, was ich gelesen habe, hat nicht das Bild zusammen für mich gebracht. Ich habe die Wikipedia-Artikel und verschiedene andere Gegenstände, einschließlich mein Textbuch

Daher wollte ich diese Community Wiki starten Post zu definieren, was Zweierkomplement ist, wie man es benutzt und wie kann es Zahlen beeinflussen während Operationen wie Abgüsse (von bis unsigned und umgekehrt unterzeichnet) , bitweise Operationen und Bit-Schicht-Betrieb.

Was ich hoffe auf ist eine klare und präzise Definition , die leicht von einem Programmierer verstanden wird.

War es hilfreich?

Lösung

Zwei-Komplement ist ein cleverer Weg, ganze Zahlen zu speichern, so dass gemeinsame mathematische Probleme sind sehr einfach zu implementieren.

Um zu verstehen, muss man die Zahlen in binär denken.

Es im Grunde sagt,

  • für Null, verwenden alle 0.
  • für positive ganze Zahlen sind, starten Sie das Zählen auf, mit einem Maximum von 2 (Anzahl der Bits - 1). -1
  • für negative ganze Zahlen sind, tun genau das Gleiche, aber schalten Sie die Rolle von 0 und 1 ist (also statt mit 0000 zu starten, mit 1111 beginnen - das ist die „Ergänzung“ -Teil).

Lassen Sie uns versuchen Sie es mit einem Mini-Byte von 4 Bit (wir nennen es eine knabbern -. 1/2 Byte)

  • 0000 - zero
  • 0001 - ein
  • 0010 - zwei
  • 0011 - drei
  • 0100 0111 - vier vor sieben

Das ist so weit wir in positive Ergebnisse gehen. 2 3 -1 = 7.

Für Negativ:

  • 1111 - negative
  • 1110 - negativ zwei
  • 1101 - negativ drei
  • 1100 1000 - negativ vier bis acht negativ

Beachten Sie, dass Sie einen zusätzlichen Wert für Negative bekommen (1000 = -8), die Sie nicht für positive Ergebnisse. Dies liegt daran, 0000 für Null verwendet wird. Dies kann als betrachtet werden Anzahl Linie von Computern.

Die Unterscheidung zwischen positiven und negativen Zahlen

Dadurch wird das erste Bit wird die Rolle des „Zeichen“ Bit, wie es verwendet werden kann zwischen positiven und negativen Dezimalwerten zu unterscheiden. Wenn das höchstwertige Bit 1 ist, dann kann die binäre gesagt werden, negativ sein, wo als ob das höchstwertige Bit (ganz links) 0 ist, können Sie die Dezimalwert positiv sagen erkennen.

„Ein Kompliment“ negative Zahlen Flips nur das Vorzeichenbit, zählt dann von 0. Aber dieser Ansatz hat mit der Interpretation 1000 als „negative Null“ befassen, die verwirrend ist. Sie in der Regel nur kümmern, wenn nahe an die Hardware arbeiten.

Andere Tipps

Ich frage mich, ob es nicht besser ist als der Wikipedia-Artikel erklärt wird.

Das grundlegende Problem, das Sie mit Zweierkomplement-Darstellung zu lösen versuchen, ist das Problem negative ganze Zahlen zu speichern.

Zuerst eine ganze Zahl ohne Vorzeichen in 4 Bits gespeichert betrachten. Sie können folgende Voraussetzungen erfüllt sein

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

Diese sind ohne Vorzeichen, da gibt es keinen Hinweis, ob sie negativ oder positiv ist.

Sign Magnitude und Excess Notation

negative Zahlen speichern können Sie eine Reihe von Dingen versuchen. Erstens können Sie Vorzeichen-Betrags-Darstellung verwenden, die das erste Bit als Vorzeichenbit ordnet darzustellen +/- und die verbleibenden Bits die Größe darzustellen. Also mit 4 Bits wieder und unter der Annahme, dass ein Mittel - und 0 + dann haben Sie

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

Sie sehen also, das Problem da? Wir haben positive und negative 0. Das größere Problem ist, Addieren und Subtrahieren von Binärzahlen. Die Schaltungen zu addieren und subtrahieren Zeichen Größe verwendet, wird sehr komplex sein.

Was ist

0010
1001 +
----

Ein weiteres System ist Überschuss Notation . Sie können negative Zahlen speichern, Sie loszuwerden, die zwei Nullen Problem bekommen, aber die Addition und Subtraktion bleibt schwierig.

So kommt Zweier-Komplement. Jetzt können Sie positive und negative ganze Zahlen speichern und Rechnen mit relativer Leichtigkeit durchzuführen. Es gibt eine Reihe von Methoden, um eine Zahl in Zweier-Komplement zu konvertieren. Hier ist eine.

Konvertieren Dezimal zu Zweierkomplement

  1. Konvertieren Sie die Zahl auf binäre (ignorieren das Schild jetzt) z.B. 5 0101 und -5 0101

  2. Wenn die Zahl eine positive Zahl ist dann sind Sie fertig. z.B. 5 ist 0101 in binären Zweier-Komplement-Notation.

  3. Wenn die Zahl negativ ist dann

    3.1 finden das Komplement (Invert 0 und 1 ist)  z.B. -5 0101 so das Komplement zu finden, ist 1010

    3.2 1 an das Komplement 1010 + 1 = 1011.      Daher -5 Ergänzung in Zweier-1011.

Also, was ist, wenn Sie 2 + (-3) in binären tun wollten? 2 + (-3) -1. Was würden Sie tun, wenn Sie Zeichen Größe wurden unter Verwendung dieser Zahlen zu addieren? 0010 + 1101 =?

Mit Zweierkomplement betrachten, wie einfach es sein würde.

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

Umwandlung Zweierkomplement auf Dezimal

Konvertieren von 1111 bis dezimal:

  1. Die Nummer beginnt mit 1, so dass es negativ ist, so finden wir das Komplement von 1111, die 0000 ist.

  2. In 1-0000, und wir erhalten 0001.

  3. Konvertieren 0001 in Dezimalzahlen, die 1 ist.

  4. das Zeichen anwenden = -1.

Tada!

Wie die meisten Erklärungen ich gesehen habe, die sind oben klar darüber, wie mit 2-Komplement zu arbeiten, aber nicht erklären, was sie wirklich sind mathematisch. Ich werde versuchen, das zu tun, für ganze Zahlen zumindest, und ich werde einige Hintergrundinformationen erfassen, die wahrscheinlich vertraut erstes ist.

Es sei daran erinnert, wie es für dezimal funktioniert:
2345
ist eine Art und Weise des Schreibens
2 × 10 3 + 3 × 10 2 + 4 × 10 1 + 5 × 10 < sup> 0 .

In der gleichen Weise, binär ist eine Art und Weise des Schreiben Zahl mit nur 0 und 1 im Anschluss an die gleiche allgemeine Idee, aber diese 10s oben mit 2s zu ersetzen. Dann binär,
1111
ist eine Art und Weise des Schreibens
1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0
und wenn Sie es heraus arbeiten, das dann auch gleich 15 (Basis 10) aus. Das ist, weil es
ist 8 + 4 + 2 + 1 = 15.

Das ist alles schön und gut für positive Zahlen. Es funktioniert sogar für negative Zahlen, wenn Sie bereit sind, nur ein Minuszeichen vor ihnen zu bleiben, wie Menschen mit Dezimalzahlen tun. Das kann auch in Computern durchgeführt werden, eine Art, aber ich habe nicht so einen Computer seit den frühen 1970er Jahren gesehen. Ich werde die Gründe für eine andere Diskussion verlassen.

Für Computer schaltet es effizienter zu sein, um eine zu verwenden, ergänzt Darstellung für negative Zahlen. Und hier ist etwas, das oft übersehen wird. Complement Notationen beinhalten eine Art Umkehrung der Ziffern der Zahl, auch die implizierten Nullen, die vor einer normalen positiven Zahl kommen. Das ist umständlich, da stellt sich die Frage: alle von ihnen? Das könnte eine unendliche Anzahl von Ziffern zu berücksichtigen.

Zum Glück, Computer stellen keine Unendlichkeiten. Die Zahlen sind auf eine bestimmte Länge beschränkt (oder Breite, wenn Sie bevorzugen). Lassen Sie sich also auf positive Binärzahlen zurück, aber mit einer bestimmten Größe. Ich werde 8 Stellen ( „Bits“) für diese Beispiele. Also unsere Binärzahl würde wirklich sein
00001111 oder in 0 × 2 7 + 0 x 2 6 + 0 x 2 5 + 0 x 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0

Um das 2er-Komplement zu bilden negativ, wir zunächst ergänzen alle (binär) Ziffern
bilden 11110000
und fügen 1 | Bildung 11110001
aber, wie wir das bedeutet -15?

verstehen

Die Antwort ist, dass wir die Bedeutung des höherwertigen Bits (ganz links) ändern. Dieses Bit wird ein 1 für alle negativen Zahlen. Die Änderung wird das Zeichen sein für seinen Beitrag zum Wert der Zahl zu ändern, es in unserem erscheint also jetzt 11110001 versteht
darzustellen -. 1 × 2 7 + 1 x 2 6 + 1 x 2 5 + 1 x 2 4 + 0 x 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0
Beachten Sie, dass "-" vor diesem Ausdruck? Es bedeutet, dass das Vorzeichenbit, das Gewicht trägt -2 7 , dh -128 (Basis 10). Alle anderen Positionen behalten das gleiche Gewicht, das sie in unsigned Binärzahlen hatte.

unsere -15 Ausarbeiten ist es
-128 + 64 + 32 + 16 + 1
Probieren Sie es auf Ihrem Rechner. es ist -15.

Von den drei Möglichkeiten, die ich negative Zahlen in Computern dargestellt gesehen haben, 2er- Komplement gewinnt die Hände nach unten der Einfachheit halber in den allgemeinen Gebrauch. Es hat eine Kuriosität, though. Da es binär ist, muss es eine gerade Anzahl von möglichen Bitkombinationen sein. Jede positive Zahl kann wi gepaart werden,th seinem negativen, aber es gibt nur eine Null. eine Null zu negieren bekommt man Null. So gibt es eine weitere Kombination, die Zahl mit 1 in dem Vorzeichenbit und 0 überall sonst. Die entsprechende positive Zahl würde nicht passen in der Anzahl von Bits verwendet wird.

Was ist noch ungerade über diese Zahl ist, dass, wenn Sie versuchen, ihre positive zu bilden durch Ergänzung und das Hinzufügen einer, können Sie die gleiche negative Zahl zurück. Es scheint natürlich, dass Null würde dies tun, aber dies ist unerwartet und überhaupt nicht das Verhalten, das wir gewohnt sind, weil Computer beiseite, wir denken an einer unbegrenzten Versorgung von Ziffern im Allgemeinen, das nicht mit fester Länge Arithmetik.

Das ist wie die Spitze eines Eisbergs von Merkwürdigkeiten. Es gibt mehr auf der Lauer unter der Oberfläche liegen, aber das ist genug für diese Diskussion. Sie könnten wahrscheinlich mehr finden, wenn Sie „Überlauf“ für Festkommaarithmetik Forschung. Wenn Sie wirklich in sie erhalten möchten, können Sie auch „modulare Arithmetik“ erforschen.

2-Komplement ist sehr nützlich für den Wert einer binären Suche, aber ich dachte an eine viel prägnanter Art und Weise, ein solches Problem zu lösen (nie gesehen jemand anderes es veröffentlichen):

ein binärer nehmen, zum Beispiel: 1101, das ist [, dass der Raum unter der Annahme, "1" ist das Zeichen] gleich -3 .

unter Verwendung von 2-Komplement würden wir tun, um diese ... Flip 1101-0010 ... in 0001 + 0010 ===> gibt uns 0011. 0011 in positiv binär = 3. daher 1101 = -3 !

Was ich realisiert:

anstatt aller Flipping und hinzugefügt haben, können Sie nur die grundlegende Methode zu tun für eine positive binäre für die Lösung (können sagen, 0101) (2 3 * 0) + (2 2 * 1) + (2 1 * 0) + (2 0 * 1) = 5

Sie genau das gleiche Konzept mit einem negativen! (Mit einem kleinen Twist)

1101 nehmen, zum Beispiel:

für die erste Nummer anstelle von 2 3 * 1 = 8 , tun - (2 3 * 1) = - 8 .

dann wie gewohnt weiter, tut -8 + (2 2 * 1) + (2 1 * 0) + (2 < sup> 0 * 1) = -3

Stellen Sie sich vor, dass Sie eine endliche Anzahl von Bits / trits / Ziffern / was auch immer. Sie definieren 0 als alle Ziffern 0 zu sein, und zählen aufwärts natürlich:

00
01
02
..

Schließlich werden Sie überfluten.

98
99
00

Wir haben zwei Ziffern und alle Zahlen von 0 bis 100 darstellen kann All diese Zahlen sind positiv! Angenommen, wir auch negative Zahlen darstellen wollen?

Was wir wirklich haben, ist ein Zyklus. Die Zahl vor 2 1. Die Zahl vor dem 1. 0. Die Zahl vor 0 ... 99 .

Also, der Einfachheit halber, sagen wir, dass jede Zahl über 50 negativ ist. "0" bis "49" für 0 bis 49 "99" -1 "98" ist -2, ... "50" -50.

Diese Darstellung ist zehn Komplement . Computer verwenden in der Regel Zweier-Komplement , die gleich ist außer Bits anstelle von Ziffern verwenden.

Das Schöne an Ergänzung Zehner ist, dass der Zusatz funktioniert . Sie brauchen nicht zu tun, etwas Besonderes positive und negative Zahlen zu addieren!

Zwei Ergänzung wird durch Zugabe einer zu 1'st Ergänzung der gegebenen Zahl herausgefunden haben. Können sagen, wir Zweierkomplement von 10101 herausfinden müssen, dann seinen Einerkomplement finden, das heißt, 01010 hinzufügen 1 zu diesem Ergebnis, das heißt, 01010+1=01011, die die endgültige Antwort ist.

Ich las eine fantastische Erklärung auf Reddit von jng, Verwendung des Wegstreckenzählers als Analogie.

 image description hier

  

Es ist eine nützliche Konvention. Die gleichen Schaltungen und logische Operationen,   addieren / subtrahieren positive Zahlen in binär arbeiten immer noch sowohl positive   und negative Zahlen, wenn die Konvention verwenden, das ist, warum es so   nützlich und allgegenwärtig.

     

Stellen Sie sich den Kilometerzähler eines Autos, es rollt herum auf (sagen wir) 99999. Wenn Sie   Zuwachs 00000 Sie 00001. Wenn Sie 00000 dekrementieren erhalten, erhalten Sie 99999   (Aufgrund der Roll-around). Wenn Sie einen zurück zu 99999 hinzufügen, geht es zurück zu   00000. Es ist also sinnvoll, um zu entscheiden, dass 99999 repräsentiert -1. Ebenso ist es sehr nützlich, um zu entscheiden, dass 99998 repräsentiert -2 und so weiter. Du hast   irgendwo, und auch durch Konvention, die obere Hälfte der Zahlen zu stoppen   gelten als negativ (50000-99999) sein, und die untere Hälfte positive   nur stehen für sich selbst (00.000-49.999). Als Ergebnis ist die obere Ziffer   wobei 5-9 bedeutet, dass die dargestellte Zahl negativ ist, und wobei 0-4   bedeutet, dass die dargestellte positiv - genau das gleiche wie das erste Bit   darstellt Zeichen in einer Binärzahl von zwei.

     

Dies zu verstehen ist zu schwer für mich war. Einmal habe ich es und ging zurück zu   Wieder lesen die Bücher Artikel und Erklärungen (es gab kein Internet   damals), drehte sie es nicht wirklich beschreiben, eine Menge von diesen aus   es verstehen. Ich habe ein Buch Lehre Assemblersprache schreiben, nachdem   dass (die seit 10 Jahren recht gut verkauft haben).

Hier können Sie die Antwort bekommen 10 - 12 in binärer Form mit 8 Bits: Was wir wirklich tun ist 10 + (-12)

Wir brauchen das Kompliment Teil von 12 zu bekommen, um sie zu subtrahieren 10. 12 binär 00001100 ist. 10 binär ist 00001010.

Um das Kompliment Teil 12 bekommen wir alle umgekehrt nur die Bits dann 1 addieren. 12 binär umgekehrt ist 11110011. Dies ist auch der Inverse-Code (Einerkomplement). Jetzt müssen wir einen hinzufügen, die jetzt 11110100 ist.

So 11110100 ist das Kompliment von 12! Einfach, wenn Sie denken, es auf diese Weise.

Nun können Sie die obige Frage von 10 lösen -. 12 in binärer Form

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

auf dem Komplementsystem der beide von einem mathematischen Standpunkt aus wirklich Sinn macht. In zehn Komplement ist die Idee, im Wesentlichen ‚Isolat‘ der Unterschied.

Beispiel: 63 - 24 = x

Wir fügen das Komplement von 24, die wirklich gerade ist (100-24). Also wirklich, alles tun, was ich ist die Zugabe von 100 auf beiden Seiten der Gleichung.

Nun ist die Gleichung lautet:. 100 + 63-24 = x + 100, das ist, warum wir die 100 (oder 10 oder 1000 oder was auch immer) zu entfernen

Durch die unbequeme Situation mit einer Anzahl von einer langen Kette von Nullen subtrahieren, verwenden wir ein ‚verminderte radix Ergänzung‘ System, im Dezimalsystem, neun-Komplement.

Wenn wir mit einer Reihe von einer großen Kette von Neunen abgezogen präsentiert werden, wir müssen nur die Zahlen rückgängig zu machen.

Beispiel: 99.999-03.275 = 96724

Das ist der Grund, nach neun Komplement, wir hinzufügen 1. Wie Sie wahrscheinlich aus der Kindheit Mathematik wissen, 9 wird 10 durch ‚Stehlen‘ 1. Also im Grunde ist es nur zehn Komplement, das 1 aus der Differenz nimmt.

In Binary, Zweier-Komplement ist gleichzusetzen zu zehn Komplement, während Einerkomplement zu neun Komplement. Der wesentliche Unterschied besteht darin, dass anstatt zu versuchen, den Unterschied mit Zehnerpotenzen (Zugabe von 10, 100, usw. in die Gleichung) zu isolieren wir versuchen, den Unterschied mit Zweierpotenzen zu isolieren.

Es ist aus diesem Grund, dass wir die Bits invertieren. Genau wie unser Minuend ist eine Kette von Neunen in dezimal, unser Minuend ist eine Kette von Einsen in binär.

Beispiel: 111.111-101.001 = 010110

Weil Ketten von Einsen 1 unter einem schönen Zweierpotenz sind, sie ‚stehlen‘ 1 aus der Differenz wie neun der in dezimal tun.

Wenn wir negativ die binäre Zahl verwenden, sind wir wirklich nur sagen:

0000 - 0101 = x

1111 - 0101 = 1010

1111 + 0000-0101 = x + 1111

Um zu ‚isolieren‘ x, brauchen wir 1 hinzugefügt werden, da 1111 ein von 10000 entfernt, und wir entfernen das führende 1, weil wir nur auf den ursprünglichen Unterschied hinzugefügt.

1111 + 1 + 0000-0101 = x + 1111 + 1

10000 + 0000-0101 = x + 10000

entfernen 10000 Nur von beiden Seiten x zu erhalten, ist es einfacher Algebra.

Viele der Antworten bisher gut erklären, warum Zweier-Komplement verwendet wird negative Zahl darzustellen, aber uns nicht sagen, was Zweierkomplementzahl ist, vor allem nicht, warum ein ‚1‘ hinzugefügt wird, und in der Tat oft in einem falschen hinzugefügt Art und Weise.

Die Verwirrung kommt aus einem armen Verständnis der Definition einer Komplement-Zahl. Eine Ergänzung ist das fehlende Teil, der etwas komplett machen würde.

Das radix Komplement einer n-stellige Zahl x in radix b ist per definitionem, b ^ n-x. In binären 4 100 darstellen, die 3 Ziffern haben (n = 3) und einen Radix von 2 (b = 2). So sein Komplement radix ist b ^ n-x = 2 ^ 3-4 = 8-4 = 4 (oder 100 in binär).

jedoch in binärem Erhalt eines Radix-Komplement wie immer sein vermindertes radix Komplement nicht so einfach ist, die als (b ^ n-1) -y definiert ist, nur 1 geringer als die des radix Komplements. Um eine verminderte radix Ergänzung zu erhalten, geben Sie einfach alle Ziffern spiegeln.

100 -> 011 (vermindertes (Einer-) radix Komplement)

die radix (Zweierkomplement) Ergänzung zu erhalten, wir einfach 1 hinzufügen, da die Definition definiert.

011 1 -.> 100 (Zweierkomplement)

Jetzt mit diesem neuen Verständnis, werfen sie einen Blick des Beispiels nimmt gegeben durch Vincent Ramdhanie (siehe oben zweite Antwort)

/ * Beginn Vincent

Konvertieren von 1111 bis dezimal:

Die Nummer beginnt mit 1, so ist es negativ, so finden wir das Komplement von 1111, die 0000 ist. In 1-0000, und wir erhalten 0001. Rechnen Sie 0001 in Dezimalzahlen, die 1 ist. Tragen Sie die Zeichen = -1. Tada!

Ende Vincent * /

Sollte verstanden werden als

Die Nummer beginnt mit 1, so ist es negativ. So wir wissen, dass es eine Ergänzung von einigem Wert x der zwei ist. Um die x durch seine Zweierkomplement dargestellt zu finden, müssen wir zunächst sein 1-Komplement finden.

Zweier-Komplement von x: 1111 Einerkomplement von x: 1111-1 -> 1110; x = 0001, (alle Ziffern Flip)

gelten die Zeichen - und die Antwort = -x = -1.

Ich mochte lavinio Antwort, aber Bits Verschiebung fügt einige Komplexität. Oft gibt es eine Auswahl von Bits zu bewegen, während das Vorzeichenbit zu respektieren oder während nicht das Vorzeichenbit zu respektieren. Dies ist die Wahl zwischen den Zahlen zu behandeln, als AK (-8 bis 7 für ein Nibble, -128 bis 127 Bytes) oder Vollbereichs-Zahlen ohne Vorzeichen (0 bis 15 für Nibbles, 0 bis 255 für Byte).

Es ist eine kluge mittels kodierend negativen ganzen Zahlen in einer Weise, die etwa die Hälfte der Kombination von Bits eines Datentyps für die negative ganze Zahlen sind reserviert, und die Zugabe der meisten der negativen ganzen Zahlen mit ihren positiven ganzen Zahlen Ergebnisse entsprechen in ein Übertrag Überlauf, der das Ergebnis läßt binäre Null sein.

So, Ergänzung im 2er-, wenn man 0x0001 dann -1 0x1111 ist, denn das ist in einer kombinierten Summe von 0x0000 (mit einem Überlauf von 1) führen wird.

2-Komplemente: Wenn wir ein Extra mit den 1-Komplementen einer Reihe hinzufügen, werden wir die 2er- Komplement bekommen. Zum Beispiel: 100101 ist es 1-Komplement ist 011010 und 2-Komplement ist 011010 + 1 = 011011 (Durch das Hinzufügen eines mit 1-Komplement) weitere Informationen dieser Artikel erklärt sie grafisch dar.

Ich hatte das gleiche Problem vor ein paar Wochen. Ich landete über sie online aus verschiedenen Quellen zu lesen und versuchte die Stücke zusammen zu stellen, und das Schreiben über es selbst nur um sicherzugehen, dass ich es richtig verstanden. Wir verwenden Zweier-Komplement für vor allem zwei Gründe:

  1. Um mehrere Darstellungen von 0
  2. zu vermeiden
  3. Zur Vermeidung von Übertragsbit zu verfolgen (wie in Einerkomplement) bei einem Überlauf.
  4. Die Durchführung einfache Operationen wie Addition und Subtraktion einfach wird.

Wenn Sie eine ausführlichere Erklärung der Sache auf der Hand, versuchen Sie den Artikel von mir geschrieben hier . Hoffe, es hilft!

Das Wort Ergänzung ergibt sich aus Vollständigkeit. Im Dezimalsystem Welt stellen die Ziffern 0 bis 9 einen ergänzen (Komplettset) von Zahlen oder Zahlensymbolen alle Dezimalzahlen auszudrücken. In der binären Welt bieten die Ziffern 0 und 1 ein Komplement von Ziffern alle binären Zahlen auszudrücken. In der Tat Die Symbole 0 und 1 verwendet werden müssen alles (Text, Bilder, usw.) sowie positiv (0) und negative (1) darzustellen. In unserer Welt ist der leere Raum links von Nummer gilt als Null:

                  35=035=000000035.

In einer Computerspeicherstelle gibt es keine Leerzeichen. Alle Bits (Binärziffern) müssen entweder 0 oder 1 sein, effizient Speichernummern verwenden kann als 8 Bit, 16 Bit, 32 Bit, 64 Bit, 128 Bit-Darstellungen gespeichert werden. Wenn eine Zahl, die als 8-Bit-Zahl gespeichert ist, auf eine 16 Bit-Stelle übertragen wird, das Vorzeichen und den Betrag (Absolutwert) gleich bleiben müssen. Sowohl 1-Komplement und 2-Komplement-Darstellungen erleichtern dies. Als ein Nomen: Sowohl 1-Komplement und 2-Komplement sind binäre Darstellungen von signierten Mengen, wo der höchstwertigen Bits (der auf der linken Seite) ist der Vorzeichen-Bit. 0 ist für positive und 1 für negativ. 2s Ergänzung bedeutet nicht negativ . Es bedeutet eine Menge unterzeichnet. Wie in dezimaler wird die Größe als die positive Menge dargestellt. Die Struktur verwendet Vorzeichenerweiterung um die Menge zu erhalten, wenn in ein Register zu fördern [] mit mehr Bits:

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

Als Verb: 2-Komplement-Mittel negieren . Es bedeutet nicht, negativ machen. Es bedeutet, wenn sie negativ machen positiv; wenn positiv make negativ. Die Größe ist der absolute Wert:

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

Diese Fähigkeit ermöglicht eine effiziente binäre Subtraktion unter Verwendung hinzufügen negieren dann.             a - b = a + (-b)

Der offizielle Weg, um die 1-Komplement zu nehmen ist für jede Ziffer subtrahiert seinen Wert von 1.

        1'scomp(0101) = 1010.

Dies ist das gleiche wie Spiegeln oder jedes Bit einzeln invertiert werden. Dies führt zu einer negativen Null, was so nicht gut geliebt wird eine Zugabe von Komplement te 1en wird das Problem loszuwerden. Zu negieren oder die 2s nehmen ergänzen nehmen zuerst die 1s Komplement dann 1 addieren.

        Example 1                             Example 2
         0101  --original number              1101
         1's comp  1010                       0010
         add 1     0001                       0001
         2's comp  1011  --negated number     0011

In den Beispielen werden die Negation als auch mit Vorzeichen erweitert Zahlen funktioniert.

Hinzufügen:
        1110 Carry 111110 Carry          0110 ist die gleiche wie 000110          1111 111111     Summe 0.101 Summe 000.101

Subtrahieren:

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

Beachten Sie, dass, wenn sie mit 2-Komplement, leerer Raum links von der Zahl der Arbeit mit Nullen für positive Zahlen gefüllt ist Butis mit Einsen für negative Zahlen gefüllt. Der Übertrag wird immer hinzugefügt und muss entweder eine 1 oder 0.

Prost

Referenz: https: //www.cs.cornell. edu / ~ tomf / note / cps104 / twoscomp.html

I invertieren alle Bits und fügen 1. Programmatically:

  // 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-Komplement einer bestimmten Zahl ist die Nr. bekam von 1 mit dem Komplement des Neins 1 hinzugefügt wird. nehme an, wir haben eine binäre Nr .: 10111001101 Es ist 1-Komplement ist: 01000110010 Und es ist 2-Komplement wird: 01000110011

Um bitweise Komplement eine Zahl ist, alle Bits in sie zu kippen. Zweierkomplement es, wir alle Bits kippen und hinzufügen.

Unter Verwendung von 2-Darstellung für signierte ganze Zahlen sind, wenden wir die Komplement-Operation 2 eine positive Zahl seiner negativen Entsprechung zu konvertieren und umgekehrt. So Knabbereien für ein Beispiel unter Verwendung 0001 (1) wird 1111 (-1) und die Anwendung des op wieder 0001 zurück.

Das Verhalten des Betriebes bei Null ist vorteilhaft in eine einzige Darstellung für Null ohne besondere Behandlung von positiven und negativen Nullen geben. 0000 ergänzt 1111, die, wenn sie 1 hinzugefügt wird. eine Null, sondern als eine positive und eine negative 0000 sprudeln, uns zu geben.

Ein wesentlicher Vorteil dieser Darstellung ist, dass die Standard-Additionsschaltungen für ganze Zahlen ohne Vorzeichen korrekte Ergebnisse, wenn auf sie angewendet. Zum Beispiel der Zugabe von 1 und -1 in Knabbereien: 0001 + 1111, überlaufen die Bits des Registers aus, hinter 0000 verlassen.

Für eine sanfte Einführung, die wunderbare computerphile eines Video zum Thema .

2-Komplement ist im Wesentlichen eine Art und Weise des Kommens mit dem Zusatz Inverse einer binären Zahl. Stellen Sie sich diese: Bei einer Zahl in binärer Form, was Bitmuster, wenn sie auf die ursprüngliche Zahl hinzugefügt, würde das Ergebnis Null machen? Wenn Sie mit diesem Bitmuster aufwarten kann dann das Bitmuster ist die -ve Darstellung (additive Inverse) der ursprünglichen Zahl; eine Anzahl seiner additive Inverse als definitions Zugabe sollte in Null-Ergebnis immer. Beispiel: Nehmen Sie 101, die 5.e dezimal ist nun die Aufgabe, mit einem Bitmuster zu kommen ist das, wenn es an den angegebenen Bitmuster hinzugefügt (101) würde in Null führen. Um das zu tun, von der am weitesten rechts stehende Bit von 101 beginnen und für jedes einzelne Bit, fragen Sie wieder die gleiche Frage: Welche Bit sollte ich in den „this“ Bit das Ergebnis zu Null zu machen? weiterhin, dass die übliche Übertrag in Berücksichtigung zu tun. Nachdem wir mit den 3 rechts meisten Stellen (die Ziffern, die die ursprüngliche Zahl ohne Rücksicht auf die führenden Nullen definieren) erfolgt der letzte Übertrag geht in dem Bitmuster des additiven Inversen. Darüber hinaus, da wir in der ursprünglichen Zahl in etwa einem Byte, alle anderen führenden Bits in dem Zusatz inversen sollten auch 1en sein abhalten könnten, so dass, wenn der Computer die Anzahl und die additive Inverse mit „dass“ Speichertyp (char) ergänzt das Ergebnis in diesem char würde alle Nullen sein.

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

Sie können auch einen Online-Rechner verwenden, das Zweierkomplement binäre Darstellung einer Dezimalzahl zu berechnen: http://www.convertforfree.com/twos-complement-calculator/

Die einfachste Antwort:

1111 + 1 = (1) 0000. So muss 1111 -1 sein. Dann -1 + 1 = 0 ist.

Es ist perfekt all dies für mich zu verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top