Siehe http://www.ulthryvasse.de/index.html
Bei der binären Codierung von Zahlen werden drei Ziele verfolgt:
Je nach gewähltem Datentyp werden diese Ziele unterschiedlich gewichtet.
Bei positiven Ganzzahlen wird der Wert im binären Zahlensystem mit '0' und '1' gespeichert. Das erste Bit ist dabei immer '0'. Beim Programmieren bestimmt der Datentyp die Anzahl Bits die verwendet werden.
short zahl = 5;
short
verwendet 16 Bit0000 0000 0000 0101
2Bei negativen Zahlen wird das sogenannte Zweierkomplement gespeichert:
Negative Zahlen haben immer Bit '1' an erster Stelle.
Bei dieser Codierung wird jede Ziffer einzeln binär codiert. Üblicherweise werden 4 Bits verwendet, um eine dezimale Ziffer zu codieren. Falls negative Zahlen möglich sind, wird das Vorzeichen ebenfalls einzeln codiert.
Die Zahl +157 soll als BCD codiert werden.
Dezimal: + 1 5 7 BCD 8-4-2-1: 1010 0001 0101 0111
In diesem Beispiel gilt:
Es existieren weitere Möglichkeiten zur Codierung von Dezimalzahlen. Dabei muss festgelegt sein:
Eine Fliesskommazahl wird als eine Multiplikation mit einer 10er-Potenz ausgedrückt.
Anstelle von +2.345 * 105 schreiben wir +2.345E5
.
Zum Beispiel:
+2.345 E 5. ^ ^ ^ | | +-- Exponent | +-------- Mantisse +----------- Vorzeichen
Für die binäre Codierung müssen wir zunächst die Mantisse ganzzahlig machen. Dazu verschieben wir den Dezimalpunkt nach links oder rechts.
+2345E+2
Hier wurde der Dezimalpunkt drei Stellen nach rechts verschoben. Deshalb wurde der Exponent um 3 reduziert.
In der binären Codierung werden die verschiedenen Informationen einzelne codiert:
In der Regel werden Fliesskommazahlen entweder mit 32 Bit (short
-Format) oder 64 Bit (long
-Format) codiert.
Da die Regeln für beide gleich sind, beschränken wir uns auf das short
-Format.
Der Korrekturwert oder Bias dient dazu, dass der codierte Exponent immer positiv ist. Dadurch entfällt eine separate Logik für das Vorzeichen des Exponenten.
Im short
-Format können die Exponenten -127 bis +128 sein.
Daher beträgt der Bias 127, wodurch wir einen korrigierten Exponenten von +0 bis +256 erhalten.