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 x
ist definiert als 2^N - x
. Zum Beispiel das Zweierkomplement von 8-Bit 1
ist 2^8 - 1
, oder 1111 1111
. Das Zweierkomplement von 8-Bit 8
ist 2^8 - 8
, was binär ist 1111 1000
. Dies kann auch berechnet werden, indem die Bits von umgedreht x
und 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.