Hexadezimalzahlen


Im nächten Kapitel werden wir es mit Hexadezimalzahlen zu tun haben, daher hier eine kleine Erklärung dazu. "Hex" heisst sechs, "dezi" zehn und "Hexadezi" damit sechszehn. Hexadezimalzahlen sind Zahlen im 16er-System. Die Ziffern gehen nicht wie im Dezimalsystem von 0 bis 9, sondern von 0 bis - ja bis etwas, das im Dezimalsystem 15 heissen würde. Aber es soll ja nur eine Ziffer sein. Man benutzt einfach die Buchstaben A bis F. Die Ziffern sind also 0,1,2,3,4,5,6,7,8, 9,A,B,C,D,E,F. 16 Ziffern. Damit man Dezimal- und Hexadezimalzahlen unterscheiden kann, schreibt man hinter die Hex-Zahlen ein kleines h: 16 = 10h. Wir sehen schon, wo der Vorteil liegt: Die Zahlen, die ein Byte darstellen kann, gehen von 0 bis FFh. Das ist, wie wenn im Dezimalsystem ein Speicher Zahlen von 0 bis 99 speichern würde.

Das Rechnen im Hex-System ist natürlich nicht ganz einfach: Was ist AFh + 3Ch ? Aber wenn wir bestimmte Bits eines Bytes oder eines Byte-Worts setzen wollen, ist das ganz praktisch: 0Fh, das sind die niedrigen 4 Bits, F0h, das sind die hohen vier Bits eines Bytes. Der Darstellungsraum eines 16-Bit-Worts geht von 0 bis FFFFh. Praktisch, nicht?

In QBASIC kann man Hex-Zahlen direkt angeben, ohne sie ins Dezimalsystem umrechnen zu müssen. Allerdings nicht dadurch, dass ein h hinter die Zahl gestellt wird, sondern es muss ein "&h" vor die Zahl gestellt werden.

? &hF1D3+&h7EA2
..ist also kein Problem. Nur dass QBASIC das Ergebnis leider dezimal ausgibt. Aber auch das kann man ändern:
? HEX$(&hF1D3+&h7EA2)
..gibt das Ergebnis hexadezimal zurück. Spätestens hier fällt uns allerdings auf, dass das Ergebnis falsch zu sein scheint. Es erscheint 7075h. Das ist aber kleiner als der erste Summand. Wieso? Nun, die Fähigkeit von QBASIC zum Umgang mit Hex-Zahlen beschränkt sich leider auf 16-Bit-Zahlen. Kommt es bei der Addition zu einem Summanden grösser als FFFFh, so wird ein Überlauf erzeugt, d.h. es wird so getan, als ob 10000h = 0h sei und das Ergebnis entspricht dann also dem Rest. In Wirklichkeit ist unser Rechenergebnis also 17075h.

Übung: Schreiben Sie in QBASIC einen Hex-Rechner für 64-Bit-Zahlen!