Wie werden negativ vorzeichenbehaftete Werte gespeichert?

12

Ich habe dieses Video gesehen mit den Maximal- und Minimalwerten von Ganzzahlen mit Vorzeichen angesehen.

Ein Beispiel für einen positiv vorzeichenbehafteten Wert - 0000 0001 Das erste Bit gibt an, dass die Zahl positiv ist und die letzten 7 Bits die Zahl selbst sind. So wird es leicht als +1 interpretiert.

Nehmen Sie nun ein Beispiel für einen negativen vorzeichenbehafteten Wert - 1000 0000, der -8 ergibt. Okay, der Computer kann verstehen, dass es wegen des ersten Bits ein negativer Wert ist, aber wie zum Teufel versteht er, dass 000 0000 -8 bedeutet?

Wie werden negative vorzeichenbehaftete Werte in einem Computer gespeichert / interpretiert?

diskutierter Baum
quelle
nl.wikipedia.org/wiki/Two%27s_complement gibt an, wie Binärzahlen auf Computern gespeichert werden.
Pieter B
@ DieterB Vielleicht dein Computer. Und viele andere Leute. Aus guten Gründen! Aber implizieren Sie nicht, dass dies der einzige Weg ist.
Underscore_d
Ganz wie du möchtest. Mir fallen mindestens 256 ein! Möglichkeiten zum Speichern von (8-Bit-) Binärzahlen auf Computern. Die meisten davon sind jedoch unglaublich dumm.
Caleth
C spezifiziert nicht, es ist hauptsächlich, wie der Chiphersteller entscheidet, die Daten darzustellen. C wird zu Maschinencode kompiliert und es wird darauf geachtet, nicht neu zu definieren, wie der Chip Zahlen speichert. Gleiche Regeln gelten für Gleitkommazahlen. Es liegt beim Chiphersteller, zu definieren, wie sie gespeichert werden. Die meisten Chiphersteller verwenden das 2er-Komplement, aber ich bin sicher, dass es Ausnahmen gibt.
Berin Loritsch

Antworten:

28

Der C-Standard schreibt keine bestimmte Art der Darstellung von negativ vorzeichenbehafteten Zahlen vor.

In den meisten Implementierungen, auf die Sie wahrscheinlich stoßen, werden Ganzzahlen mit negativem Vorzeichen im sogenannten Zweierkomplement gespeichert . Die andere Möglichkeit, negativ vorzeichenbehaftete Zahlen zu speichern, nennt man Komplement .

Das Zweierkomplement einer N-Bit-Zahl xist definiert als 2^N - x. Zum Beispiel das Zweierkomplement von 8-Bit 1ist 2^8 - 1, oder 1111 1111. Das Zweierkomplement von 8-Bit 8ist 2^8 - 8, was binär ist 1111 1000. Dies kann auch berechnet werden, indem die Bits von umgedreht xund eins hinzugefügt werden. Beispielsweise:

 1      = 0000 0001
~1      = 1111 1110
~1 + 1  = 1111 1111
-1      = 1111 1111

 21     = 0001 0101
~21     = 1110 1010
~21 + 1 = 1110 1011
-21     = 1110 1011

Das Einerkomplement einer N-Bit-Zahl x ist im Grunde genommen als x definiert, wobei alle seine Bits umgedreht sind.

 1      = 0000 0001
-1      = 1111 1110

 21     = 0001 0101
-21     = 1110 1010

Zweierkomplement hat mehrere Vorteile gegenüber dem eigenen Komplement. Zum Beispiel hat es nicht das Konzept der "negativen Null", was für viele Menschen aus gutem Grund verwirrend ist. Addition, Multiplikation und Subtraktion funktionieren genauso mit vorzeichenbehafteten Ganzzahlen, die mit Zweierkomplementen implementiert sind, wie auch mit vorzeichenlosen Ganzzahlen.

Miles Rout
quelle
18

Es gibt drei bekannte Methoden zur Darstellung negativer Werte in Binärform:

  1. Signierte Magnitude . Dies ist am einfachsten zu verstehen, da es genauso funktioniert, wie wir es von negativen Dezimalwerten gewohnt sind: Die erste Position (Bit) repräsentiert das Vorzeichen (0 für positiv, 1 für negativ) und die anderen Bits repräsentieren die Zahl . Obwohl es für uns leicht zu verstehen ist, ist es für Computer schwierig, damit zu arbeiten, insbesondere wenn mit negativen Zahlen gerechnet wird.
    Bei vorzeichenbehafteter 8-Bit-Größe wird der Wert 8 als 0 0001000 und -8 als 1 0001000 dargestellt.

  2. Eine Ergänzung . In dieser Darstellung werden negative Zahlen aus der entsprechenden positiven Zahl erzeugt, indem alle Bits und nicht nur das Vorzeichenbit umgedreht werden. Dies erleichtert die Arbeit mit negativen Zahlen für einen Computer, hat jedoch die Komplikation, dass es zwei unterschiedliche Darstellungen für +0 und -0 gibt. Das Umdrehen aller Teile erschwert das Verständnis für den Menschen.
    Im 8-Bit-Einerkomplement wird der Wert 8 als 00001000 und -8 als 11110111 dargestellt.

  3. Zweierkomplement . Dies ist die gebräuchlichste Darstellung, die heutzutage für negative ganze Zahlen verwendet wird, da sie für Computer am einfachsten zu handhaben ist, für Menschen jedoch am schwierigsten zu verstehen ist. Beim Vergleich der für negative Werte verwendeten Bitmuster zwischen dem eigenen Komplement und dem Zweierkomplement kann beobachtet werden, dass dasselbe Bitmuster im Zweierkomplement für die nächstniedrigere Zahl codiert. Zum Beispiel steht 11111111 für -0 im eigenen Komplement und für -1 im Zweierkomplement und in ähnlicher Weise für 10000000 (-127 vs -128).
    Im 8-Bit-Zweierkomplement wird der Wert 8 als 00001000 und -8 als 11111000 dargestellt.

Bart van Ingen Schenau
quelle
8
Die vorzeichenbehaftete Größe hat auch zwei Nullen.
Jörg W Mittag
+1 für die Erwähnung des Vorzeichens / der Größe. ungewöhnlich und unpraktisch (für CPUs, wenn nicht für Menschen!), aber wissenswert.
Underscore_d
Fast alle von uns arbeiten mit vorzeichenbehafteter Größe, insbesondere mit FP-Nummern.
Paulo1205
2

Die signierten ganzen Zahlen werden mit http://en.wikipedia.org/wiki/Two%27s%20complement gespeichert

Dann bekommen Sie:

000   0
001   1
010   2
011   3
100   -4
101   -3
110   -2
111   -1

Grundsätzlich ist es sehr einfach zu zählen, Sie zählen bis zur Hälfte des Maximums der vorzeichenbehafteten Ganzzahl. Mach ein +1, mach es negativ und zähle abwärts.

Pieter B
quelle