Es ist eine Frage der Art und Weise, wie die Daten gespeichert werden. Ihre Interaktion mit Sam würde einen besseren Vergleich ergeben, wenn Sie darum bitten, dass Sie es aufschreiben könnten, aber nur Papier im Wert von acht Zeichen haben.
"Sam, gib mir die Telefonnummer."
"5555555555"
"Oh nein, ich habe kein Papier mehr. Wenn ich nur vorher gewusst hätte, wie viele Daten ich angefordert habe, hätte ich sie besser aufbereiten können!"
In den meisten Sprachen müssen Sie stattdessen einen Typ deklarieren, damit dieser im Voraus weiß und sich vorbereitet:
"Sam, wie lange ist eine Telefonnummer?"
"Zehn Zeichen."
"Okay, dann lass mich ein größeres Stück Papier holen. Jetzt gib mir die Telefonnummer."
"5555555555"
"Verstanden! Danke Sam!"
Noch haariger wird es, wenn man sich die grundlegenden Arten der Datenspeicherung ansieht. Wenn Sie wie ich sind, haben Sie ein Notizbuch mit verschiedenen Notizen, nur notierten Zahlen, keinem Kontext oder Beschriftungen für irgendetwas, und drei Tage später haben Sie keine Ahnung, was dies bedeutet. Dies ist auch für Computer häufig ein Problem. Viele Sprachen haben "int" -Typen (int, long, short, byte) und "float" -Typen (float, double). Warum ist das notwendig?
Schauen wir uns zunächst an, wie eine Ganzzahl gespeichert und im Allgemeinen im Computer dargestellt wird. Sie wissen wahrscheinlich, dass auf der Basisebene alles binär ist (Einsen und Nullen). Binär ist eigentlich ein Zahlensystem, das genau wie unser Dezimalzahlensystem funktioniert. In der Dezimalzahl zählen Sie 0 bis 9 (mit unendlichen implizierten führenden Nullen, die Sie nicht schreiben), dann rollen Sie zurück auf 0 und erhöhen die nächste Ziffer, so dass Sie 10 haben. Sie wiederholen, bis Sie von 19 auf 20 rollen, Wiederholen Sie diesen Vorgang, bis Sie von 99 auf 100 gewechselt haben.
Binär ist nicht anders, außer dass Sie anstelle von 0 bis 9 0 bis 1 zählen. 0, 1, 10, 11, 100, 101, 110, 111, 1000. Wenn Sie also 9 eingeben, wird der Speicher binär aufgezeichnet als 1001. Dies ist eine tatsächliche Zahl. Es kann in genau dieser Form addiert, subtrahiert, multipliziert usw. werden. 10 + 1 = 11. 10 + 10 = 100 (1 auf 0 rollen und 1 tragen). 11 × 10 = 110 (und äquivalent 11 + 11 = 110).
Jetzt gibt es im eigentlichen Speicher (einschließlich der Register) eine Liste, ein Array, wie auch immer Sie es nennen möchten, von Bits (potenzielle Einsen oder Nullen) direkt nebeneinander. Auf diese Weise werden diese Bits logisch organisiert, um eine zu erstellen Zahl größer als 1. Problem ist, was machst du mit Dezimalstellen? Sie können nicht einfach ein Stück Hardware zwischen die beiden Bits im Register einfügen, und es würde viel zu viel kosten, zwischen jedem Bitpaar "Dezimalbits" einzufügen. Also, was ist zu tun?
Sie kodieren es. Im Allgemeinen bestimmt die Architektur der CPU oder der Software, wie dies durchgeführt wird. Eine übliche Methode besteht jedoch darin, ein Vorzeichen (+ oder -, im Allgemeinen 1 ist negativ) im ersten Bit des Registers, einer Mantisse, zu speichern (Ihre Nummer ist verschoben Es muss jedoch häufig erforderlich sein, die Dezimalzahl für die folgende X-Anzahl von Bits und einen Exponenten (die Anzahl der Verschiebungen) für den Rest zu entfernen. Es ähnelt der wissenschaftlichen Notation.
Durch die Eingabe kann der Compiler erkennen, worauf es ankommt. Stellen Sie sich vor, Sie haben den Wert 1,3 in Register 1 gespeichert. Wir werden hier nur unser eigenes ausgefallenes Codierungsschema entwickeln, 1 Bit für das Vorzeichen, 4 für die Mantisse, 3 für den Exponenten (1 Bit für das Vorzeichen, 2 für die Größe). Dies ist eine positive Zahl, daher ist das Vorzeichen positiv (0). Unsere Mantisse wäre 13 (1101) und unser Exponent wäre -1 (101 (1 für negativ, 01 = 1)). Also speichern wir 01101101 in Register 1. Jetzt haben wir diese Variable nicht mehr eingegeben. Wenn die Laufzeitumgebung sie verwendet, heißt es "sicher, das ist eine ganze Zahl, warum nicht". Wenn also der Wert ausgegeben wird, wird 109 (64 +) angezeigt 32 + 8 + 4 + 1), was offensichtlich nicht richtig ist.
Es ist jedoch nicht für jede Sprache erforderlich, dass Sie explizit eingeben. C # hat ein Schlüsselwort "var", das bewirkt, dass der Variablentyp beim Kompilieren interpretiert wird, und andere Sprachen wie Javascript werden vollständig dynamisch typisiert, bis Sie eine Ganzzahl in einer Variablen speichern und sie dann einem Booleschen Wert zuweisen können Weisen Sie es erneut einer Zeichenfolge zu, und die Sprache behält alles im Auge.
Der Compiler, der Interpreter oder die Laufzeit sind jedoch viel einfacher - und dies führt häufig zu einem schnelleren Programm, da keine wertvollen Ressourcen für die Eingabe von Daten aufgewendet werden müssen Daten, die Sie geben.