1. Oktalkodierung

Apropos Kodierungen ... Wie Sie wissen, verwenden wir im Alltag die Dezimalschreibweise : Alle unsere Zahlen werden durch 10 Symbole dargestellt: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Es gibt 10 Zahlen, daher heißt das System Dezimalsystem.

Aber Programmierer sind große Erfinder. Sie entwickelten sofort Kodierungen, die eine unterschiedliche Anzahl von Symbolen verwenden. Zum Beispiel 16, 8 und 2.

Die alternative Kodierung, die 8 Symbole verwendet, ist die einfachste: Lassen Sie einfach die 8 und die 9 weg und Sie erhalten eine oktale Kodierung (das oktale Zahlensystem ).

Und ja, Sie können das Oktalsystem verwenden, um numerische Literale anzugeben. Wenn es natürlich wirklich nötig ist. Es ist einfacher als es klingt. Sie müssen lediglich die Zahl 0 vor die Zahl schreiben.

Mit anderen Worten: Java behandelt jedes ganzzahlige Literal, das mit 0 beginnt, als Oktalwert.

Beispiele:

Code Anmerkungen
int x = 015;
x ist 13: 1*8+5
int x = 025;
x ist 21: 2*8+5
int x = 0123;
x ist 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Dies lässt sich nicht kompilieren: 8 ist nicht eines der in der Oktalkodierung verwendeten Symbole.

Es ist unwahrscheinlich, dass Sie Oktalzahlen in Ihren Code schreiben müssen, aber Sie sollten wissen, was sie sind. Schließlich müssen Sie Code lesen, der von anderen geschrieben wurde. Und wie oben erwähnt, sind Programmierer große Erfinder.

Denken Sie daran, dass Sie nicht einfach vor jede Zahl eine 0 schreiben können.



2. Binäre Kodierung

Noch interessanter ist die binäre Kodierung. Wenn Oktal nur die Ziffern 0-7 hat, dann hat Binär nur 0 und 1. Warum ist diese Kodierung notwendig?

Dies hat alles mit der internen Struktur eines Computers zu tun. Alles in einem Computer läuft mit Strom, und tatsächlich ist die effizienteste Art, etwas mit Strom zu speichern und zu übertragen, die Verwendung von zwei Zuständen: Entweder ist kein Strom im Kabel (null) und es ist Strom vorhanden (eins).

Dies ist der Grund für die Popularität des binären Zahlensystems.

Prinzipiell kommt sie in Java nicht sehr oft zum Einsatz: Java gilt als Hochsprache, völlig abstrahiert von der Hardware, auf der sie läuft. Interessiert es Sie wirklich, welches Format zum Speichern und Verarbeiten von Daten in einem Computer verwendet wird?

Aber im Laufe der letzten Jahrzehnte haben Programmierer die binäre Kodierung (und andere darauf basierende Kodierungen) lieben gelernt. Daher verfügt Java über Operatoren, die Binärzahlen als Eingaben verwenden. Und die Genauigkeit von Gleitkommazahlen hängt von ihrer binären Darstellung ab.

Grundsätzlich ist es für Sie besser, über diese Kodierung Bescheid zu wissen, als nichts davon zu wissen.

Und wie es bei der Oktalkodierung der Fall war, verfügt Java über eine Möglichkeit, Literale mithilfe des Binärsystems zu kodieren. Das heißt, Literale bestehen nur aus Nullen und Einsen. Damit der Java-Compiler versteht, dass der Code ein binär codiertes numerisches Literal und nicht nur eine Dezimalzahl bestehend aus Nullen und Einsen enthält, werden alle binären Literale mit dem Präfix 0b identifiziert (das „b“ kommt vom Wort „binary“). .

Beispiele:

Code Anmerkungen
int x = 0b100;
х ist 4: 1*4+0*2+0
int x = 0b1111;
х ist 15: 1*8+1*4+1*2+1
int x = 0b1111000111;
х ist 967: 1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 +0* 2 3 +1*2 2 +1*2+1;
int x = 0b12000;
Dies lässt sich nicht kompilieren: 2 ist nicht eines der in der Binärcodierung verwendeten Symbole.


3. Hexadezimale Kodierung

Neben oktaler und binärer Kodierung können Literale auch hexadezimal geschrieben werden. Dies ist eine sehr beliebte Kodierung.

Denn obwohl die Binärschreibweise der tatsächlichen Speicherung von Zahlen am nächsten kommt, ist es für Menschen zu schwierig, effektiv mit solchen Zahlen zu arbeiten: Im Binärformat enthält die Zahl eine Million 20 Ziffern und nicht 7.

Aus diesem Grund haben Programmierer das Hexadezimalsystem erfunden. Schließlich ist 16 2 hoch 4 , also entsprechen genau 4 Bits einer Hexadezimalziffer. Grob gesagt können nun alle 4 Bits als einzelne Hexadezimalziffer geschrieben werden.

Die hexadezimale Kodierung hat auch ihr eigenes eindeutiges Präfix: 0x . Beispiele:

Dezimalzahl Binäre Notation Hexadezimale Schreibweise
17 0b 0001 0001 0x 1 1
4 1 0b 0010 1 00 1 0x 2 9
85 0b 0101 0101 0x 5 5
256 0b 1 0000 0000 0x 1 0 0

Ok, sagen Sie, es ist klar genug, wie wir zum Oktalsystem gekommen sind: Wir haben einfach die Zahlen 8 und 9 weggelassen, aber woher bekommen wir die 6 zusätzlichen Symbole für das Hexadezimalsystem? Ich würde sie gerne sehen!

Es ist alles unkompliziert. Die ersten 6 Buchstaben des englischen Alphabets wurden als die 6 fehlenden Symbole übernommen: A (10), B (11), C (12), D (13), E (14), F (15).

Beispiele:

Hexadezimale Schreibweise Binäre Notation Dezimalzahl
0x 1 0b 0000 0001 1
0x 9 0b 0000 1001 9
0x A 0b 0000 1010 10
0x B 0b 0000 1011 11
0x C 0b 0000 1100 12
0x D 0b 0000 1101 13
0x E 0b 0000 1110 14
0x F 0b 0000 1111 15
0x 1 F 0b 0001 1111 31
0x A F 0b 1010 1111 175
0x F F 0b 1111 1111 255
0x F F F 0b 1111 1111 1111 4095


4. So konvertieren Sie eine Zahl aus dem Hexadezimalformat

Die Konvertierung einer Zahl von Hexadezimalzahl in Dezimalzahl ist sehr einfach. Nehmen wir an, Sie haben die Zahl 0 x A F C F . Wie viel ist das im Dezimalformat?

Erstens haben wir ein Positionszahlensystem, was bedeutet, dass der Beitrag jeder Ziffer zur Gesamtzahl um den Faktor 16 zunimmt, wenn wir uns von rechts nach links bewegen:

A * 16 3 + F * 16 2 + C * 16 1 + F

Das Symbol A entspricht der Zahl 10, der Buchstabe C entspricht der Zahl 12 und der Buchstabe F steht für fünfzehn. Wir bekommen:

10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15

Wenn wir 16 auf die verschiedenen Potenzen erhöhen, die den Ziffern entsprechen, erhalten wir:

10 * 4096 + 15 * 256 + 12 * 16 + 15

Wir fassen alles zusammen und erhalten:

45007

Sie wissen, wie diese Nummer im Speicher gespeichert wird:

0x A F C F

Aber jetzt wandeln wir es in eine Binärdatei um. Im Binärformat wäre es:

0b 1010 1111 1100 1111

Jeder Satz von vier Bits entspricht genau einem Hexadezimalzeichen. Das ist super praktisch. Ohne jegliche Multiplikation oder Potenzierung.“