Es gibt zwei Gründe, warum Sie sich mit den verschiedenen numerischen Datentypen befassen sollten.
1. Speicher speichern
for(long k=0;k<=10;k++)
{
//stuff
}
Warum ein Long verwenden, wenn es genauso gut eine Ganzzahl oder sogar ein Byte sein kann? Sie würden in der Tat mehrere Bytes Speicher sparen, wenn Sie dies tun.
2. Gleitkommazahlen und Ganzzahlen werden im Computer unterschiedlich gespeichert
Angenommen, wir haben die Nummer 22 in einer ganzen Zahl gespeichert. Der Computer speichert diese Nummer im Binärspeicher wie folgt:
0000 0000 0000 0000 0000 0000 0001 0110
Wenn Sie mit dem Binärzahlensystem nicht vertraut sind, kann dies in wissenschaftlicher Notation dargestellt werden als: 2 ^ 0 * 0 + 2 ^ 1 * 1 + 2 ^ 2 * 1 + 2 ^ 3 * 0 + 2 ^ 4 * 1 + 2 ^ 5 * 0 + ... + 2 ^ 30 * 0. Das letzte Bit kann verwendet werden oder nicht, um anzuzeigen, ob die Zahl negativ ist (abhängig davon, ob der Datentyp vorzeichenbehaftet oder vorzeichenlos ist).
Im Wesentlichen ist es nur eine Summe von 2 ^ (Bitstelle) * Wert.
Dies ändert sich, wenn Sie sich auf Werte beziehen, die einen Dezimalpunkt enthalten. Angenommen, Sie haben die Dezimalzahl 3,75. Dies wird binär als 11.11 bezeichnet. Wir können dies als wissenschaftliche Notation als 2 ^ 1 * 1 + 2 ^ 0 * 1 + 2 ^ -1 * 1 + 2 ^ -2 * 1 oder normalisiert als 1,111 * 2 ^ 2 darstellen
Der Computer kann dies jedoch nicht speichern: Er hat keine explizite Methode, um diesen Binärpunkt auszudrücken (die Binärzahlensystemversion des Dezimalpunkts). Der Computer kann nur Einsen und Nullen speichern. Hier kommt der Gleitkomma-Datentyp ins Spiel.
Angenommen, die Größe von (float) beträgt 4 Bytes, dann haben Sie insgesamt 32 Bit. Dem ersten Bit wird das "Vorzeichenbit" zugewiesen. Es gibt keine nicht signierten Floats oder Doubles. Die nächsten 8 Bits werden für den "Exponenten" verwendet und die letzten 23 Bits werden als "Signifikand" (oder manchmal als Mantisse bezeichnet) verwendet. In unserem Beispiel von 3,75 wäre unser Exponent 2 ^ 1 und unser Signifikant wäre 1,111.
Wenn das erste Bit 1 ist, ist die Zahl negativ. Wenn nicht, positiv. Der Exponent wird durch etwas geändert, das als "Bias" bezeichnet wird, sodass wir "0000 0010" nicht einfach als Exponenten speichern können. Die Vorspannung für eine Gleitkommazahl mit einfacher Genauigkeit beträgt 127, und die Vorspannung für eine doppelte Genauigkeit (hier erhält der doppelte Datentyp seinen Namen) beträgt 1023. Die letzten 23 Bits sind für den Signifikanten reserviert. Der Signifikant ist einfach der Wert rechts von unserem Binärpunkt.
Unser Exponent wäre der Bias (127) + Exponent (1) oder binär dargestellt
1000 0000
Unsere Bedeutung wäre:
111 0000 0000 0000 0000 0000
Daher wird 3,75 dargestellt als:
0100 0000 0111 0000 0000 0000 0000 0000
Betrachten wir nun die Zahl 8, die als Gleitkommazahl und als Ganzzahl dargestellt wird:
0100 0001 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 1000
Wie um alles in der Welt wird der Computer 8.0 und 8 hinzufügen? Oder sogar multiplizieren!? Der Computer (genauer gesagt x86-Computer) verfügt über verschiedene Teile der CPU, die Gleitkommazahlen und Ganzzahlen hinzufügen.