Das Zweierkomplement ist eine clevere Methode zum Speichern von Ganzzahlen, sodass häufig auftretende mathematische Probleme sehr einfach zu implementieren sind.
Um zu verstehen, müssen Sie an die Zahlen in Binärform denken.
Es heißt im Grunde:
- Verwenden Sie für Null alle Nullen.
- Beginnen Sie bei positiven Ganzzahlen mit dem Hochzählen mit maximal 2 (Anzahl der Bits - 1) -1.
- Machen Sie bei negativen ganzen Zahlen genau das Gleiche, aber wechseln Sie die Rolle von Nullen und Einsen (anstatt mit 0000 zu beginnen, beginnen Sie mit 1111 - das ist der "Komplement" -Teil).
Versuchen wir es mit einem Mini-Byte von 4 Bits (wir nennen es ein Nibble - 1/2 Byte).
0000
- Null
0001
- einer
0010
- zwei
0011
- drei
0100
bis 0111
- vier bis sieben
So weit können wir positiv gehen. 2 3 -1 = 7.
Für Negative:
1111
- negativ
1110
- negative zwei
1101
- negative drei
1100
zu 1000
- negativ vier zu negativ acht
Beachten Sie, dass Sie einen zusätzlichen Wert für Negative ( 1000
= -8) erhalten, den Sie für Positive nicht erhalten. Dies liegt daran 0000
, dass für Null verwendet wird. Dies kann als Anzahl der Computer angesehen werden.
Unterscheidung zwischen positiven und negativen Zahlen
Dabei erhält das erste Bit die Rolle des "Vorzeichen" -Bits, da damit zwischen nichtnegativen und negativen Dezimalwerten unterschieden werden kann. Wenn das höchstwertige Bit ist 1
, kann die Binärdatei als negativ bezeichnet werden. Wenn das höchstwertige Bit (ganz links) ist 0
, können Sie sagen, dass der Dezimalwert nicht negativ ist.
Negative Zahlen "Ein Komplement" kippen nur das Vorzeichenbit um und zählen dann von 0. Dieser Ansatz muss sich jedoch mit der Interpretation 1000
als "negative Null" befassen, was verwirrend ist. Sie müssen sich im Allgemeinen nur darum kümmern, wenn Sie in der Nähe der Hardware arbeiten.
Ich frage mich, ob es besser erklärt werden könnte als der Wikipedia-Artikel.
Das Grundproblem, das Sie mit der Zweierkomplementdarstellung lösen möchten, ist das Problem des Speicherns negativer Ganzzahlen.
Betrachten Sie zunächst eine vorzeichenlose Ganzzahl, die in 4 Bits gespeichert ist. Sie können Folgendes haben
Diese sind nicht signiert, da es keinen Hinweis darauf gibt, ob sie negativ oder positiv sind.
Vorzeichengröße und Überschussnotation
Um negative Zahlen zu speichern, können Sie eine Reihe von Dingen ausprobieren. Zunächst können Sie die Vorzeichengrößen-Notation verwenden, bei der das erste Bit als Vorzeichenbit zur Darstellung von +/- und die verbleibenden Bits zur Darstellung der Größe zugewiesen werden. Verwenden Sie also wieder 4 Bits und nehmen Sie an, dass 1 bedeutet - und 0 bedeutet +, dann haben Sie
Siehst du das Problem dort? Wir haben positive und negative 0. Das größere Problem ist das Addieren und Subtrahieren von Binärzahlen. Die Schaltungen, die unter Verwendung der Vorzeichengröße addiert und subtrahiert werden müssen, sind sehr komplex.
Was ist
?
Ein anderes System ist die überschüssige Notation . Sie können negative Zahlen speichern, Sie werden das Problem der zwei Nullen los, aber Addition und Subtraktion bleiben schwierig.
So kommt die Ergänzung von zwei. Jetzt können Sie positive und negative Ganzzahlen speichern und relativ einfach rechnen. Es gibt eine Reihe von Methoden, um eine Zahl in ein Zweierkomplement umzuwandeln. Hier ist eine.
Konvertieren Sie Dezimal in Zweierkomplement
Konvertieren Sie die Zahl in eine Binärzahl (ignorieren Sie das Vorzeichen vorerst), z. B. 5 ist 0101 und -5 ist 0101
Wenn die Zahl eine positive Zahl ist, sind Sie fertig. zB 5 ist 0101 in binärer Form unter Verwendung der Zweierkomplementnotation.
Wenn die Zahl negativ ist, dann
3.1 finde das Komplement (invertiere Nullen und Einsen), zB -5 ist 0101, also finde das Komplement 1010
3.2 Addiere 1 zum Komplement 1010 + 1 = 1011. Daher ist -5 im Zweierkomplement 1011.
Was wäre, wenn Sie 2 + (-3) binär machen wollten? 2 + (-3) ist -1. Was müssten Sie tun, wenn Sie diese Zahlen mit der Vorzeichengröße addieren würden? 0010 + 1101 =?
Verwenden Sie das Zweierkomplement, um zu überlegen, wie einfach es wäre.
Zweierkomplement in Dezimal umwandeln
1111 in Dezimal umwandeln:
Die Zahl beginnt mit 1, ist also negativ, also finden wir das Komplement von 1111, das 0000 ist.
Addiere 1 zu 0000 und wir erhalten 0001.
Konvertieren Sie 0001 in eine Dezimalzahl (1).
Wenden Sie das Vorzeichen = -1 an.
Tada!
quelle
Wie die meisten Erklärungen ich gesehen habe, über diejenigen sind klar darüber , wie mit 2-Komplement zu arbeiten, aber nicht wirklich erklären , was sie sind mathematisch. Ich werde versuchen, dies zumindest für ganze Zahlen zu tun, und ich werde einige Hintergründe behandeln, die wahrscheinlich zuerst bekannt sind.
Erinnern Sie sich, wie es für Dezimalstellen funktioniert:
2345
ist eine Schreibweise für
2 × 10 3 + 3 × 10 2 + 4 × 10 1 + 5 × 10 0 .
Auf die gleiche Weise ist Binär eine Methode, Zahlen mit nur 0 und 1 nach der gleichen allgemeinen Idee zu schreiben , aber die obigen 10s durch 2s zu ersetzen. Dann in binär,
1111
eine Art,
1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0 zu schreiben,
und wenn Sie es herausarbeiten, ergibt sich 15 (Basis 10). Das liegt daran, dass es
8 + 4 + 2 + 1 = 15 ist.
Das ist alles gut und schön für positive Zahlen. Es funktioniert sogar bei negativen Zahlen, wenn Sie bereit sind, nur ein Minuszeichen vor sie zu setzen, wie es Menschen mit Dezimalzahlen tun. Das kann man sogar in Computern machen, aber ich habe einen solchen Computer seit den frühen 1970ern nicht mehr gesehen. Ich werde die Gründe für eine andere Diskussion hinterlassen.
Für Computer erweist es sich als effizienter, eine Komplementdarstellung für negative Zahlen zu verwenden. Und hier ist etwas, das oft übersehen wird. Komplementnotationen beinhalten eine Art Umkehrung der Ziffern der Zahl, sogar der implizierten Nullen, die vor einer normalen positiven Zahl stehen. Das ist umständlich, denn es stellt sich die Frage: Alle? Das könnte eine unendliche Anzahl von Ziffern sein, die berücksichtigt werden müssen.
Glücklicherweise repräsentieren Computer keine Unendlichkeiten. Zahlen sind auf eine bestimmte Länge (oder Breite, wenn Sie dies bevorzugen) beschränkt. Kehren wir also zu positiven Binärzahlen zurück, jedoch mit einer bestimmten Größe. Ich werde 8 Ziffern ("Bits") für diese Beispiele verwenden. Unsere Binärzahl wäre also wirklich
00001111
oder
0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0
Um das 2er-Komplement negativ zu bilden, ergänzen wir zuerst alle (binären) Ziffern, um
11110000 zu bilden,
und addieren 1, um
11110001 zu bilden. Aber
wie sollen wir das verstehen, um -15 zu bedeuten?
Die Antwort ist, dass wir die Bedeutung des höherwertigen Bits (des ganz linken) ändern. Dieses Bit ist eine 1 für alle negativen Zahlen. Die Änderung besteht darin, das Vorzeichen seines Beitrags zum Wert der Zahl zu ändern, in der es erscheint. Nun wird unser 11110001 so verstanden, dass er
- 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + darstellt 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0
Beachten Sie, dass "-" vor diesem Ausdruck steht? Dies bedeutet, dass das Vorzeichenbit das Gewicht -2 7 trägt, dh -128 (Basis 10). Alle anderen Positionen behalten das gleiche Gewicht wie vorzeichenlose Binärzahlen.
Wenn Sie unsere -15 berechnen , ist es
-128 + 64 + 32 + 16 + 1.
Probieren Sie es auf Ihrem Taschenrechner aus. es ist -15.
Von den drei Hauptmethoden, mit denen ich negative Zahlen in Computern gesehen habe, gewinnt das Komplement von 2 zweifellos, um die allgemeine Verwendung zu vereinfachen. Es hat jedoch eine Seltsamkeit. Da es binär ist, muss es eine gerade Anzahl möglicher Bitkombinationen geben. Jede positive Zahl kann mit ihrer negativen gepaart werden, aber es gibt nur eine Null. Wenn Sie eine Null negieren, erhalten Sie eine Null. Es gibt also noch eine Kombination, die Zahl mit 1 im Vorzeichenbit und 0 überall sonst. Die entsprechende positive Zahl würde nicht in die Anzahl der verwendeten Bits passen.
Was noch seltsamer an dieser Zahl ist, ist, dass Sie dieselbe negative Zahl zurückerhalten, wenn Sie versuchen, ihr Positiv durch Ergänzen und Hinzufügen einer zu bilden. Es scheint natürlich, dass Null dies tun würde, aber dies ist unerwartet und überhaupt nicht das Verhalten, an das wir gewöhnt sind, da wir, abgesehen von Computern, im Allgemeinen an eine unbegrenzte Anzahl von Ziffern denken, nicht an diese Arithmetik mit fester Länge.
Dies ist wie die Spitze eines Eisbergs voller Kuriositäten. Unter der Oberfläche lauert noch mehr, aber das reicht für diese Diskussion. Sie könnten wahrscheinlich mehr finden, wenn Sie nach "Überlauf" für Festkomma-Arithmetik suchen. Wenn Sie sich wirklich darauf einlassen möchten, können Sie auch "modulare Arithmetik" erforschen.
quelle
Das Komplement von 2 ist sehr nützlich, um den Wert einer Binärdatei zu ermitteln. Ich habe mir jedoch eine viel präzisere Methode zur Lösung eines solchen Problems überlegt (ich habe noch nie jemanden gesehen, der es veröffentlicht):
Nehmen Sie zum Beispiel eine Binärdatei: 1101, die [unter der Annahme, dass das Leerzeichen "1" das Vorzeichen ist] gleich ist -3 ist .
Mit dem 2er-Komplement würden wir dies tun ... 1101 auf 0010 drehen ... 0001 + 0010 hinzufügen ===> ergibt 0011. 0011 in positiver Binärzahl = 3. daher 1101 = -3 !
Was mir klar wurde:
Anstatt alles umzudrehen und hinzuzufügen, können Sie einfach die grundlegende Methode zum Lösen einer positiven Binärdatei (sagen wir 0101) ausführen: (2 3 * 0) + (2 2 * 1) + (2 1 * 0) + (2 0 * 1) = 5.
Machen Sie genau das gleiche Konzept mit einem Negativ! (Mit einer kleinen Drehung)
Nehmen Sie zum Beispiel 1101:
für die erste Zahl anstelle von 2 3 * 1 = 8 tun Sie - (2 3 * 1) = -8 .
Fahren Sie dann wie gewohnt fort und machen Sie -8 + (2 2 * 1) + (2 1 * 0) + (2 0 * 1) = -3
quelle
Stellen Sie sich vor, Sie haben eine endliche Anzahl von Bits / Trits / Ziffern / was auch immer. Sie definieren 0 als alle Ziffern, die 0 sind, und zählen natürlich nach oben:
Schließlich werden Sie überlaufen.
Wir haben zwei Ziffern und können alle Zahlen von 0 bis 100 darstellen. Alle diese Zahlen sind positiv! Angenommen, wir möchten auch negative Zahlen darstellen?
Was wir wirklich haben, ist ein Zyklus. Die Zahl vor 2 ist 1. Die Zahl vor 1 ist 0. Die Zahl vor 0 ist ... 99 .
Nehmen wir der Einfachheit halber an, dass jede Zahl über 50 negativ ist. "0" bis "49" stehen für 0 bis 49. "99" ist -1, "98" ist -2, ... "50" ist -50.
Diese Darstellung ist das Zehner-Komplement . Computer verwenden normalerweise das Zweierkomplement , das identisch ist, außer dass Bits anstelle von Ziffern verwendet werden.
Das Schöne an der Zehner-Ergänzung ist, dass die Addition einfach funktioniert . Sie müssen nichts Besonderes tun, um positive und negative Zahlen hinzuzufügen!
quelle
Ich habe eine fantastische Erklärung zu Reddit von jng gelesen, wobei ich den Kilometerzähler als Analogie verwendet habe.
quelle
Zwei Komplemente werden herausgefunden, indem eins zu 1'-Komplement der gegebenen Zahl addiert wird. Nehmen wir an, wir müssen zwei Komplemente herausfinden und
10101
dann ihre Einsen finden, dh zu diesem Ergebnis01010
hinzufügen1
, das heißt01010+1=01011
, was die endgültige Antwort ist.quelle
Lassen Sie uns die Antwort 10 - 12 in binärer Form mit 8 Bits erhalten: Was wir wirklich tun werden, ist 10 + (-12)
Wir müssen den Komplimentteil von 12 erhalten, um ihn von 10 zu subtrahieren. 12 in binär ist 00001100. 10 in binär ist 00001010.
Um den Komplimentteil von 12 zu erhalten, kehren wir einfach alle Bits um und addieren dann 1. 12 in binär umgekehrt ist 11110011. Dies ist auch der inverse Code (das eigene Komplement). Jetzt müssen wir eine hinzufügen, die jetzt 11110100 ist.
11110100 ist also das Kompliment von 12! Einfach, wenn Sie es so sehen.
Jetzt können Sie die obige Frage von 10 - 12 in binärer Form lösen.
quelle
2er-Ergänzungen: Wenn wir eine zusätzliche mit den 1er-Ergänzungen einer Zahl hinzufügen, erhalten wir die 2er-Ergänzungen. Beispiel: 100101 Das 1er-Komplement ist 011010 und das 2er-Komplement ist 011010 + 1 = 011011 (durch Hinzufügen eines 1er-Komplements) . Weitere Informationen finden Sie in diesem Artikel grafisch.
quelle
Wenn man das Komplementsystem der beiden aus mathematischer Sicht betrachtet, ist es wirklich sinnvoll. In der Zehner-Ergänzung besteht die Idee darin, den Unterschied im Wesentlichen zu "isolieren".
Beispiel: 63 - 24 = x
Wir fügen die Ergänzung von 24 hinzu, die wirklich nur (100 - 24) ist. Alles, was wir tun, ist 100 auf beiden Seiten der Gleichung zu addieren.
Die Gleichung lautet nun: 100 + 63 - 24 = x + 100, deshalb entfernen wir die 100 (oder 10 oder 1000 oder was auch immer).
Aufgrund der unbequemen Situation, eine Zahl von einer langen Kette von Nullen subtrahieren zu müssen, verwenden wir im Dezimalsystem das Neunerkomplement ein "verringertes Radixkomplement" -System.
Wenn wir eine Zahl sehen, die von einer großen Kette von Neunen abgezogen wird, müssen wir nur die Zahlen umkehren.
Beispiel: 99999 - 03275 = 96724
Das ist der Grund, warum wir nach dem Neuner-Komplement 1 hinzufügen. Wie Sie wahrscheinlich aus der Mathematik der Kindheit wissen, wird 9 durch 'Stehlen' zu 10. Im Grunde genommen ist es also nur das Zehner-Komplement, das 1 aus dem Unterschied nimmt.
In Binary entspricht das Zweierkomplement dem Zehnerkomplement, während das Zweierkomplement dem Neunerkomplement entspricht. Der Hauptunterschied besteht darin, dass wir nicht versuchen, den Unterschied mit Zehnerpotenzen zu isolieren (10, 100 usw. in die Gleichung einfügen), sondern den Unterschied mit Zweierpotenzen zu isolieren.
Aus diesem Grund invertieren wir die Bits. Genau wie unser Minuend eine Kette von Neunern in Dezimalzahl ist, ist unser Minuend eine Kette von Einsen in Binärform.
Beispiel: 111111 - 101001 = 010110
Da Ketten von Einsen 1 unter einer schönen Zweierpotenz liegen, stehlen sie 1 aus der Differenz, wie es Neuner in Dezimalzahlen tun.
Wenn wir negative Binärzahlen verwenden, sagen wir wirklich nur:
0000 - 0101 = x
1111 - 0101 = 1010
1111 + 0000 - 0101 = x + 1111
Um x zu 'isolieren', müssen wir 1 hinzufügen, da 1111 eins von 10000 entfernt ist, und wir entfernen die führende 1, weil wir sie gerade zum ursprünglichen Unterschied hinzugefügt haben.
1111 + 1 + 0000 - 0101 = x + 1111 + 1
10000 + 0000 - 0101 = x + 10000
Entfernen Sie einfach 10000 von beiden Seiten, um x zu erhalten. Dies ist die grundlegende Algebra.
quelle
Viele der bisherigen Antworten erklären gut, warum das Zweierkomplement zur Darstellung einer negativen Zahl verwendet wird, sagen uns jedoch nicht, was die Zweierkomplementzahl ist, insbesondere nicht, warum eine '1' hinzugefügt wird und tatsächlich oft falsch hinzugefügt wird.
Die Verwirrung ergibt sich aus einem schlechten Verständnis der Definition einer Komplementzahl. Eine Ergänzung ist der fehlende Teil, der etwas vervollständigen würde.
Das Radixkomplement einer n-stelligen Zahl x in Radix b ist per Definition b ^ nx. In Binär wird 4 durch 100 dargestellt, was 3 Ziffern (n = 3) und einen Radix von 2 (b = 2) hat. Sein Radixkomplement ist also b ^ nx = 2 ^ 3-4 = 8-4 = 4 (oder 100 in binär).
Beim binären Erhalten eines Radixkomplements ist es jedoch nicht so einfach, sein verringertes Radixkomplement zu erhalten, das als (b ^ n-1) -y definiert ist, nur 1 weniger als das des Radixkomplements. Um ein verringertes Radix-Komplement zu erhalten, drehen Sie einfach alle Ziffern um.
100 -> 011 (vermindertes Radixkomplement)
Um das Radix-Komplement (zwei) zu erhalten, addieren wir einfach 1 als definierte Definition.
011 +1 -> 100 (Zweierkomplement).
Schauen wir uns nun mit diesem neuen Verständnis das Beispiel von Vincent Ramdhanie an (siehe obige zweite Antwort).
/ * Start von Vincent
1111 in Dezimal umwandeln:
Die Zahl beginnt mit 1, ist also negativ, also finden wir das Komplement von 1111, das 0000 ist. Addieren Sie 1 zu 0000 und erhalten Sie 0001. Konvertieren Sie 0001 in eine Dezimalzahl, die 1 ist. Wenden Sie das Vorzeichen = -1 an. Tada!
Ende von Vincent * /
Sollte verstanden werden als
Die Zahl beginnt mit 1, ist also negativ. Wir wissen also, dass es sich um ein Zweierkomplement mit einem Wert x handelt. Um das x zu finden, das durch das Zweierkomplement dargestellt wird, müssen wir zuerst das Einsenkomplement finden.
Zweierkomplement von x: 1111 Einkomplement von x: 1111-1 -> 1110; x = 0001, (alle Ziffern umdrehen)
Wende das Zeichen - an und die Antwort = -x = -1.
quelle
Das Wort Komplement leitet sich von der Vollständigkeit ab. In der Dezimalwelt stellen die Ziffern 0 bis 9 eine Ergänzung (vollständiger Satz) von Ziffern oder numerischen Symbolen bereit , um alle Dezimalzahlen auszudrücken. In der binären Welt stellen die Ziffern 0 und 1 ein Komplement von Ziffern bereit , um alle binären Zahlen auszudrücken. Tatsächlich müssen die Symbole 0 und 1 verwendet werden, um alles (Text, Bilder usw.) sowie positive (0) und negative (1) darzustellen. In unserer Welt wird das Leerzeichen links von der Zahl als Null betrachtet:
In einem Computerspeicherort gibt es kein Leerzeichen. Alle Bits (Binärziffern) müssen entweder 0 oder 1 sein. Zur effizienten Verwendung von Speichernummern können 8-Bit-, 16-Bit-, 32-Bit-, 64-Bit- und 128-Bit-Darstellungen gespeichert werden. Wenn eine als 8-Bit-Nummer gespeicherte Zahl an eine 16-Bit-Stelle übertragen wird, müssen Vorzeichen und Größe (Absolutwert) gleich bleiben. Dies erleichtert sowohl die Komplementdarstellung von 1 als auch die Komplementdarstellung von 2. Als Substantiv: Sowohl das 1er-Komplement als auch das 2er-Komplement sind binäre Darstellungen von vorzeichenbehafteten Größen, wobei das höchstwertige Bit (das linke) das Vorzeichenbit ist. 0 ist für positiv und 1 ist für negativ. 2s Komplement bedeutet nicht negativ. Es bedeutet eine signierte Menge. Wie bei der Dezimalstelle wird die Größe als positive Größe dargestellt. Die Struktur verwendet eine Vorzeichenerweiterung, um die Menge beim Heraufstufen in ein Register [] mit mehr Bits beizubehalten:
Als Verb: 2-Komplement bedeutet negieren . Es bedeutet nicht, negativ zu machen. Es bedeutet, wenn negativ positiv ist; Wenn positiv, negativ. Die Größe ist der absolute Wert:
Diese Fähigkeit ermöglicht eine effiziente binäre Subtraktion durch Negieren und Addieren. a - b = a + (-b)
Der offizielle Weg, das 1-Komplement zu nehmen, besteht darin, für jede Ziffer ihren Wert von 1 zu subtrahieren.
Dies entspricht dem Umdrehen oder Invertieren jedes Bits einzeln. Dies führt zu einer negativen Null, die nicht sehr beliebt ist, so dass das Problem durch Hinzufügen einer Eins zum Komplement von te 1 beseitigt wird. Um das 2s-Komplement zu negieren oder zu nehmen, nehmen Sie zuerst das 1s-Komplement und addieren Sie dann 1.
In den Beispielen funktioniert die Negation auch mit vorzeichenerweiterten Zahlen.
Hinzufügen:
1110 Carry 111110 Carry 0110 entspricht 000110 1111 111111 Summe 0101 Summe 000101
Subtrahieren:
Beachten Sie, dass beim Arbeiten mit dem Zweierkomplement das Leerzeichen links von der Zahl mit Nullen für positive Zahlen gefüllt ist, aber mit Einsen für negative Zahlen. Der Übertrag wird immer hinzugefügt und muss entweder eine 1 oder eine 0 sein.
Prost
quelle
Das Komplement von 2 ist im Wesentlichen eine Möglichkeit, die additive Inverse einer Binärzahl zu finden. Fragen Sie sich Folgendes: Wenn eine Zahl in binärer Form gegeben ist, würde welches Bitmuster, wenn es zur ursprünglichen Zahl hinzugefügt wird, das Ergebnis auf Null setzen? Wenn Sie dieses Bitmuster erstellen können, ist dieses Bitmuster die -ve-Darstellung (additive Inverse) der ursprünglichen Zahl. Wie per Definition sollte das Hinzufügen einer Zahl zu ihrer additiven Umkehrung immer zu Null führen. Beispiel: Nehmen Sie 101, was dezimal 5 ist. Nun besteht die Aufgabe darin, ein Bitmuster zu erstellen, das beim Hinzufügen zu dem angegebenen Bitmuster (101) zu Null führen würde. Beginnen Sie dazu mit dem Bit ganz rechts von 101 und stellen Sie für jedes einzelne Bit erneut dieselbe Frage: Welches Bit sollte ich zu "diesem" Bit hinzufügen, um das Ergebnis auf Null zu setzen? Setzen Sie dies unter Berücksichtigung der üblichen Übertragung fort. Nachdem wir mit den 3 am weitesten rechts stehenden Stellen fertig sind (die Ziffern, die die ursprüngliche Zahl ohne Rücksicht auf die führenden Nullen definieren), geht der letzte Übertrag in das Bitmuster der additiven Inversen. Da wir die ursprüngliche Zahl beispielsweise in einem einzelnen Byte halten könnten, sollten alle anderen führenden Bits in der additiven Inversen ebenfalls 1 sein, damit der Computer die Zahl und ihre additive Inverse unter Verwendung dieses Speichertyps (char) addiert. Das Ergebnis in diesem Zeichen wären alle Nullen.
quelle
Ich mochte Lavinios Antwort, aber das Verschieben von Bits erhöht die Komplexität. Oft gibt es die Wahl zwischen sich bewegenden Bits, während das Vorzeichenbit respektiert wird oder wenn das Vorzeichenbit nicht respektiert wird. Dies ist die Wahl zwischen der Behandlung der Zahlen als vorzeichenbehaftet (-8 bis 7 für ein Halbbyte, -128 bis 127 für Bytes) oder vorzeichenlosen Zahlen mit vollem Bereich (0 bis 15 für Halbbytes, 0 bis 255 für Bytes).
quelle
Es ist ein cleveres Mittel, negative Ganzzahlen so zu codieren, dass ungefähr die Hälfte der Kombination von Bits eines Datentyps für negative Ganzzahlen reserviert ist und die Addition der meisten negativen Ganzzahlen mit ihren entsprechenden positiven Ganzzahlen zu einem Übertragsüberlauf führt das Ergebnis bleibt also binär Null.
Wenn also im 2er-Komplement 0x0001 ist, ist -1 0x1111, da dies zu einer kombinierten Summe von 0x0000 (mit einem Überlauf von 1) führt.
quelle
Ich hatte vor ein paar Wochen das gleiche Problem. Am Ende habe ich online aus verschiedenen Quellen darüber gelesen, versucht, die Teile zusammenzusetzen, und selbst darüber geschrieben, um sicherzugehen, dass ich es richtig verstanden habe. Wir verwenden das Zweierkomplement hauptsächlich aus zwei Gründen:
Wenn Sie eine ausführlichere Erklärung der Angelegenheit wünschen, probieren Sie den Artikel aus, den ich hier geschrieben habe . Ich hoffe es hilft!
quelle
Das Zweierkomplement ist eine der Möglichkeiten, eine negative Zahl auszudrücken, und die meisten Controller und Prozessoren speichern eine negative Zahl in der Zweierkomplementform
quelle
REFERENZ: https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html
Ich invertiere alle Bits und füge 1 hinzu. Programmatisch:
quelle
Das 2er-Komplement einer gegebenen Zahl ist die Nr. bekam durch Addition von 1 mit dem 1er-Komplement der Nr. Angenommen, wir haben eine Binärnummer: 10111001101 Das Komplement von 1 lautet: 01000110010 Das Komplement von 2 lautet: 01000110011
quelle
Eine Zahl bitweise zu ergänzen bedeutet, alle darin enthaltenen Bits umzudrehen. Um zwei zu ergänzen, drehen wir alle Bits um und fügen eins hinzu.
Unter Verwendung der 2er-Komplementdarstellung für vorzeichenbehaftete Ganzzahlen wenden wir die 2er-Komplementoperation an, um eine positive Zahl in ihr negatives Äquivalent umzuwandeln und umgekehrt. Wenn Sie also Nibbles als Beispiel verwenden, wird
0001
(1) zu1111
(-1), und wenn Sie die Operation erneut anwenden, kehren Sie zu zurück0001
.Das Verhalten der Operation bei Null ist vorteilhaft, wenn eine einzelne Darstellung für Null ohne spezielle Behandlung von positiven und negativen Nullen gegeben wird.
0000
ergänzt1111
, was, wenn 1 hinzugefügt wird. läuft über0000
und gibt uns eine Null, anstatt eine positive und eine negative.Ein Hauptvorteil dieser Darstellung besteht darin, dass die Standardadditionsschaltungen für vorzeichenlose ganze Zahlen korrekte Ergebnisse liefern, wenn sie auf sie angewendet werden. Wenn Sie beispielsweise 1 und -1 in Halbbytes hinzufügen, laufen
0001 + 1111
die Bits aus dem Register heraus und bleiben zurück0000
.Für eine sanfte Einführung haben die wunderbaren Computerphile ein Video zu diesem Thema produziert .
quelle
In einfachen Worten
2's Complement
ist eine Möglichkeit, negative Zahlen im Computerspeicher zu speichern. Positive Zahlen werden als normale Binärzahl gespeichert.Betrachten wir dieses Beispiel:
Computer verwendet
Binary Number System
, um eine beliebige Zahl darzustellen.Dies wird dargestellt als
0101
.Wenn der Computer trifft
-
Zeichen gibt, berechnet er das 2er-Komplement und speichert es.i.e
5 = 0101 und das Komplement von 2 ist1011
.Wichtige Regeln, nach denen der Computer Zahlen verarbeitet, sind:
1
, muss es einenegative
Zahl sein.0
es sich um eine positive Zahl, da kein-0
Zahlensystem vorhanden ist. (1000 is not -0
stattdessen ist sie positiv8
).0
ist es0
.positive number
.quelle
Sie können auch einen Online-Rechner verwenden, um die Zweierkomplement-Binärdarstellung einer Dezimalzahl zu berechnen: http://www.convertforfree.com/twos-complement-calculator/
quelle
Die einfachste Antwort:
1111 + 1 = (1) 0000. Also muss 1111 -1 sein. Dann ist -1 + 1 = 0.
Es ist perfekt, das alles für mich zu verstehen.
quelle