Mehr zum Zweierkomplement

Bisher haben wir Bitmuster immer als nicht-negative ganze Zahlen (unsigned integer) interpretiert. Dass man die Bitmuster aber auch als vorzeichenbehaftete ganze Zahlen interpretieren kann hat sich schon beim Subtrahieren angedeutet. Dabei haben wir mit dem sogenannten Zweierkomplement gearbeitet ohne dies konkret beim Namen zu nennen.

Darauf wird jetzt näher eingegangen. Im Video zeige ich zunächst was mit CircuitVerse am Ende gemacht wird. Im zweiten Teil könnt ihr mit dieser Vorlage das dann nachmachen.

Darstellbare Zahlenbereiche

Bei der Interpretation als Unsigned-Integer (nicht-negative ganze Zahlen) kann man mit n-bit die Werte von 0 bis \(2^n - 1\) darstellen. Interpretiert man die Bitmuster als Signed-Integer (vorzeichenbehaftete ganze Zahlen), dann kann der Bereich von \(-2^{n-1}, \dots, 2^{n-1} - 1\) dargestellt werden. Also hat man für konkrete Längen von Bitmustern folgende Zahlenbereiche zur Verfügung:

\[\begin{array}{lll}\text{Anzahl der Bits} &\text{Unsigned-Integer} &\text{Signed-Integer}\\8 &0,\dots,255 &-127,\dots,128\\16 &0,\dots,65536 &-32768, \dots, 32767 \\32 &0, \dots, 4294967296 &-2147483648, \dots, 2147483647 \\64 &0,\dots, 18446744073709551616&-9223372036854775808, \dots, 9223372036854775807 \\\end{array}\]

Der Grund wieso man gerade diese Zahlenbereich zur Verfügung hat ist der: Egal ob man mit der einen oder anderen Darstellung arbeiten möchte, der Rechner kann beispielsweise mit demselben Addierer ausführen (er weiß nicht einmal wie wir die Bitmuster interpretieren). Das macht die Entwicklung der Hardware einfacher (und billiger).

Wo wird das später eine Rolle spielen?

Beim Programmieren gilt nach einer Anweisung j=i+1 nicht unbedingt, dass j größer ist als i. Das kann teuer werden, wenn man solche Fälle beim Programmieren nicht ausschließen kann.

Lernvideo