========================= Mehr zum Zweierkomplement [TOC] ========================= 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: ---- LATEX --------------------------------------------------------------------- \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 ========= ---- VIDEO ------------------------------ https://www.youtube.com/embed/QWrNC99Cw-4 ----------------------------------------- :links: dieser Vorlage -> https://circuitverse.org/users/20564/projects/92573 Das kann teuer werden -> https://hownot2code.com/2016/09/02/a-space-error-370-million-for-an-integer-overflow/ :navigate: up -> doc:index next -> doc:session01/page02