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 |
---|---|
|
x ist 13: 1*8+5 |
|
x ist 21: 2*8+5 |
|
x ist 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0 |
|
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 |
---|---|
|
х ist 4: 1*4+0*2+0 |
|
х ist 15: 1*8+1*4+1*2+1 |
|
х 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; |
|
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.“
GO TO FULL VERSION