„Es gibt nichts Besseres als effektives Programmieren, Amigo! Vertraue einem alten Roboter.“

„Sprechen Sie von Chiffren, die von Spionen verwendet werden?“

„Natürlich nicht. Ich spreche davon, Informationen in einer leicht verdaulichen Form darzustellen. Von Zahlensystemen. Sie wissen, dass die meisten Menschen im Alltag das Dezimalsystem verwenden. Es verwendet 10 Symbole, um jede Zahl darzustellen: 0, 1, 2 , 3, 4, 5, 6, 7, 8, 9. Es gibt 10 Ziffern, daher heißt das System Dezimalzahl.“

„Das war für Menschen mit ihren zehn Fingern praktisch. Aber Programmierer sind große Erfinder. Sie haben sofort Kodierungen entwickelt, die eine andere Anzahl von Ziffern verwenden. Zum Beispiel 2, 8, 16 oder 64 Ziffern. Sie haben das gemacht.“ Machen Sie es für Computer praktisch, die auf „Es gibt ein Signal / es gibt kein Signal“ angewiesen sind.

„Ah, ich sehe, was sie gemeinsam haben … Alle diese Systeme basieren auf Zweierpotenzen.

Oktale Kodierung

„Gute Beobachtung. Fangen wir mit einer Kodierung an, die 8 Ziffern umfasst. Menschen finden das vielleicht am einfachsten: Lassen Sie einfach die Zahlen 8 und 9 weg und – bumm – Sie haben die Oktalkodierung (Zahlensystem). Kürzlich wurde Ihnen von Literalen erzählt , richtig ?"

"Ja ich war."

„Nun, Überraschung! Sie können numerische Literale festlegen, die mit dem Oktalsystem codiert sind. Wenn Sie es wirklich müssen. Es ist einfacher als es klingt. Setzen Sie einfach 0 vor die ganze Zahl.

„Wenn also ein numerisches Literal mit Null beginnt, bedeutet das, dass es oktal ist ?“

„Ja, Java wird es als Oktal behandeln.

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.

„Aber wenn ich beabsichtige, dass es oktal ist, kann ich das dann?“

"Ja.

Binäre Kodierung

„Auch wenn Sie es noch nicht verstehen, ist die Binärkodierung Ihre Muttersprache. Ich möchte Sie daran erinnern. Wenn Oktal nur die Ziffern 0-7 hat, dann hat Binärkodierung nur 0 und 1.“

„Warum ist diese Kodierung notwendig?“

„Wie ich oben erwähnt habe, hat dies alles mit der internen Struktur eines Computers zu tun. Alles in einem Computer wird mit Strom betrieben, und der effizienteste Weg, etwas mit Strom zu speichern und zu übertragen, besteht tatsächlich darin, zwei Zustände zu verwenden: entweder Es gibt keinen Strom im Kabel (Null) und es gibt Strom (Eins).“

„Deshalb ist sie so beliebt ... Hmm, es scheint, dass ich tatsächlich anfange, mich an diese Sprache zu erinnern!“

„Alle Roboter verstehen es perfekt. Obwohl es in Java nicht sehr oft verwendet wird. Java gilt als Hochsprache, völlig abstrahiert von der Hardware, auf der es läuft. Interessiert es Sie wirklich, welches Format zum Speichern und Verarbeiten von Daten verwendet wird?“ in einem Computer?

„Aber im Laufe der letzten Jahrzehnte haben Programmierer die Binärkodierung (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ärzahl ab.“ Darstellung.

„Kurz gesagt, es ist besser für Sie, über diese Kodierung Bescheid zu wissen, als es nicht zu wissen.“

„Richtig. Und wie bei der Oktalkodierung gibt es in Java eine Möglichkeit, Literale mithilfe des Binärsystems zu kodieren.“

„Also werden sie nur aus Nullen und Einsen bestehen?“

„Genau. 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, ist es üblich, dass alle binären Literale mit dem Präfix 0b (das „b“) beginnen ' kommt vom Wort binär).

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.

Hexadezimale Kodierung

„Was ist zwei hoch vier?“

„Sechzehn. Du hast die richtige Frage herausgefunden, die du einem Roboter stellen kannst, der so weit gekommen ist wie ich!“

„Es scheint Ihnen, dass Sie weit gekommen sind. Wie auch immer, sechzehn. Zusätzlich zu oktalen und binären Kodierungen können Literale auch hexadezimal geschrieben werden. Dies ist eine sehr beliebte Kodierung.“

„Das liegt daran, dass die Binärschreibweise zwar so nah wie möglich an der tatsächlichen Speicherung von Zahlen ist, es aber für Menschen zu schwierig ist, effektiv mit solchen Zahlen zu arbeiten: Im Binärformat hat die Zahl eine Million 20 Ziffern, nicht 7.“

„Deshalb haben sich Programmierer das Hexadezimalsystem ausgedacht. Wie Sie richtig bemerkt haben, ist 16 schließlich 2 hoch 4, also entsprechen genau 4 Bits einer Hexadezimalziffer.“

„So können jetzt alle 4 Bits in einer einzigen hexadezimalen Ziffer geschrieben werden.“

"Richtig. 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

„Okay, es ist also klar genug, wie wir zum Oktalsystem gekommen sind: Wir haben einfach die Zahlen 8 und 9 weggelassen. Aber woher bekommen wir die 6 fehlenden Ziffern für das Hexadezimalsystem? Ich würde sie gerne sehen!“

„Es ist alles ganz einfach. Die ersten 6 Buchstaben des englischen Alphabets wurden als die 6 fehlenden Ziffern genommen: 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

„Wie wandelt man eine Hexadezimalzahl in eine Dezimalzahl um?“

„Es ist ganz 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 zunimmt 16 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 besagt, dass wir die Zahl 12 haben, 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

„Jetzt wissen Sie, wie 45007 im Speicher gespeichert wird.“

„Ja, das tue ich. Es ist 0x A F C F

„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 Multiplikation oder Potenzierung.“