bookmark_borderInteger – Ganze Zahlen

Tinyint

Die kleinste Speichergrösse für Zahlen ist der sogenannte Tinyint. Ein Tinyint ist genau ein Byte gross – was hoffentlich jetzt keine Überraschung ist. Wie Wiederholen: ein Byte hat 8 Bits. Jedes Bit hat 2 Speichermöglichkeiten. Man rechnet also 2^8=256 Möglichkeiten. Entsprechend kann der Tinyint alle Zahlen von 0 bis 255 darstellen. Es sind nur positive Zahlen möglich. Dieser Typ von Int wird aufgrund seiner Einschränkung (nur positive Zahlen möglich) heutzutage sehr selten oder überhaupt nie benutzt.

Smallint

Die nächste Grösse ist der smallint. Er ist genau 2 Byte gross. Doppelt so gross wie der Vorgänger. Wer jetzt erwartet, dass man also Zahlen bis 510 speichern kann – der irrt sich. Wir begegnen hier einem exponentiellen Wachstum. 2 Byte haben 16 Bit a 2 Speichermöglichkeiten. Die Anzahl der Optionen errechnet sich daher wie folgt: 2^16= 65’536 Möglichkeiten. Wie wir beim Tinyint gesehen haben, möchten wir auch negative Zahlen speichern können, also verwenden wir die Hälfte (32’768) Möglichkeiten um Minuszahlen zu speichern und die andere Hälfte um positive Zahlen zu speichern – oh und eine Option brauchen wir noch für die 0. Also können wir Zahlen von -32’768 bis + 32’767 speichern. Wer sich jetzt fragt, warum es bei den positiven Zahlen eine weniger ist als bei Minus – eben: wegen der 0.

int

Kommen wir zu der am häufigsten verwendeten Form: int. Dieser Datentyp ist 4 Byte grosse, doppelt so gross wie sein Vorgänger, und er hat entsprechend 2^32 Speichermöglichkeiten, das sind über vier Milliarden Möglichkeiten. Mehr als 2 Milliarden positive und mehr als 2 Milliarden negative. Daher ist dies der meistverwendete Typ, denn es gibt nur wenig Fälle, in denen noch grössere Zahlen abgespeichert werden müssen.

bigint

Aber ein paar Gelegenheiten mag es ja noch geben, also machen wir noch bigint mit 8 Byte und, ja, 2^64 anyone? Ich muss kurz Googeln wie diese Zahl heist^^ Trillionen genau. Also weit über 18 Trillionen Möglichkeiten. 9 Trillionen Positive und 9 Trillionen Negative.

bookmark_borderArrays

Bevor wir über (noch) kompliziertere Datentypen sprechen können, müssen wir über Arrays sprechen. Arrays kann man immer dann benutzen, wenn man eine bestimmte Menge eines bestimmten Datentyps einen anderen Datentyp ergibt. Versuchen wir das doch mal rein Verständnis halber mit Bananen.

Nehmen wir also an, Banane wäre ein Datentyp. Ich kann eine bestimmte Menge – üblicherweise exakt ein Kilo – in eine Bananenkiste stapeln. Dadurch kann einen neuen Datentyp «Bananenkiste» erhalten. Mehrere Bananenkisten zusammen ergeben einen Frachtcontainer (Nein – ich weiss nicht wie viele das sind – es geht hier ums Prinzip, nicht um Logistik), und so weiter.

In der IT werden Arrays sehr gerne benutzt, da digital alles auf eine Abfolge von Nullen und Einsen hinausläuft. Alles ist ein Array von einem Bit, wenn man so möchte. Trotzdem wird meistens direkt mit Bytes gearbeitet, also mit 8 Bit Blöcken – und ja: Ein Byte ist im Prinzip auch ein Array aus 8 Bit – vollkommen korrekt.

Alles Digitale könnte man also – wenn man wollte – als Array aus Bytes ausdrücken. Dieser Blogpost? Ein Array aus Bytes, ja. Deines Lieblings Netflix Serie? Auch ja!

List<>

In vielen Programmiersprachen gibt es zusätzlich noch Listen. Diese unterscheiden sich von Arrays dadurch, dass die exakte Anzahl im Voraus nicht bekannt ist (Ich weiss noch nicht, wie viele Bananen ich einpacken will). Das ist sozusagen eine Bananenkiste, welche automatisch mitwächst, wenn man mehr Bananen hineinlegt. Auf klassischen Festplatten haben Listen ein Nachteil: sie sind unter Umständen weniger schnell als Arrays. Wenn die Bananenkiste wachsen soll, der Frachtcontainer aber bereits voll ist, dann bleibt nichts anderes übrig, als eine neue Bananenkiste in einem neuen Container zu beginnen und die alte Kiste mit dem Hinweis zu versehen, dass es noch mehr Bananen in einer anderen Kiste gibt. Beim Einsammeln der Bananen habe ich dadurch länger, weil ich 2 Container abklappern muss. Wenn ich dagegen von Anfang an weis, wie viele Bananen ich einlagern muss, kann ich den entsprechenden Platz im Container reservieren. Mit dem wachsenden Einsatz von SSD’s wird dieser Nachteil aber je länger je mehr relativiert.

bookmark_borderByte

Jetzt wird es schon etwas grösser und schwieriger. Aber man will ja nicht nur Rechnen mit Computern, sondern auch schreiben. Wie wir beim Bit gelernt haben, kennen Computer eigentlich nur 1 und 0. Die Herausforderung ist also, Buchstaben als Nullen und Einsen auszudrücken. Hierfür braucht man eine Codierungstabelle.

In der Geschichte der Computer gab es verschiedene Ansätze für derartige Code, und teils favorisierten verschiedene Hersteller auch verschiedene Codes. Der bekannteste, der sich dann auch durchsetzte, ist ASCII. ASCII kann alle Buchstaben von A bis Z und alle Zahlen von 0 bis 9 in 7 Bit darstellen. Für Amerikaner war das ausreichend, sie kannten (und kennen bis heute) keine Sonderzeichen.

In der IT verdoppeln sich Werte immer.

Merksatz

An der Stelle muss angemerkt werden, dass vieles in der IT sich immer verdoppelt. Nachdem man einen Computer mit 1 Bit gebaut hat, baut man halt einen mit 2, indem man «das Gleiche doppelt» macht – das ist natürlich vereinfacht, aber einprägsam, daher kann man es sich so vorstellen. Nach 2 Bit baut man halt einen mit 4, und danach mit 8 und dann – Hoppla, jetzt haben wir nie einen Computer mit 7 Bit gebaut. Sowas! Daher hat ein Byte 8 Bit und nicht 7, obwohl für ASCII 7 Bits gereicht hätten. Ein Bit ist unbenutzt. Was für ein Glücksfall für den Rest der Welt.

Denn auch die Speichermöglichkeiten verdoppeln sich mit jedem Bit. Ein Bit kann 2 Werte speichern, wie wir schon gelernt haben, 0 und 1. 2 Bit können schon 4 Werte speichern und so weiter. Wenn wir 8 Bit haben, aber ASCII nur 7 braucht, dann bleiben exakt 128 ungenutzte Speichermöglichkeiten übrig.

Diesen ungenutzten Speicherplatz hat z. B. Westeuropa in seinem Code ISO 8859-1 (auch bekannt als Latin 1) benutzt, um seine Sonderzeichen (äüöéèà usw.) speichern zu können, welche im ursprünglichen ASCII nicht enthalten waren.

Also ist ein Byte ein CHAR?

Viele Programmiersprache kennen den Datentyp CHAR, welches exakt einen Buchstaben abbildet. Man könnte also annehmen, dass ein CHAR exakt 1 Byte auf der Festplatte belegt – und so war es in DOS Zeiten auch tatsächlich. Sein der UNICODE erfunden wurde, können es aber auch 32 Bit (oder 4 Byte) sein. Einige Programmiersprachen weisen dies explizit aus, in dem sie den Datentyp als NCHAR bezeichnen, andere tun dies nicht.

bookmark_borderBit

Bestimmt hast du auch schon gehört, dass Computer in 0 und 1 «denken», wobei rechnen das bessere Wort wäre. Das ist korrekt – bis heute arbeiten Computern ausschliesslich mit 0 und 1, also mit Bits.

Die Ursache hierfür liegt in der Elektronik, welche ein Kernbaustein aller Computer darstellt. Auf einer Leitung kann Strom fliessen (1) oder nicht (0). Die ersten Computer hatten Kondensatoren, welche entweder Strom geladen hatten (1) oder nicht (0) – und bei einem Stromausfall waren die Daten verloren.

Die ersten permanenten Speichermedien waren Lochkarten die entweder ein Loch hatten – oder keines. Bis heute mit modernen SSD ist das BIT die kleinste mögliche Speichereinheit geblieben, welche genau einen Wert umfasst: 0 oder 1.

Auch heute noch kommt dem Bit einige Bedeutung zu, beispielsweise bei einer Parkkarte: Hat bezahlt, hat nicht bezahlt. Oder bei Bürobatches: Darf hier durch oder darf nicht hier durch. Nullen und Einsen. Maschinensteuerung: Tür ist offen, Tür ist geschlossen – und so weiter.

Bit werden in verschiedenen Programmiersprachen auch als Boolean bezeichnet.