1. Octale codering

Over coderingen gesproken... Zoals u weet, gebruiken we in het dagelijks leven decimale notatie : al onze getallen worden weergegeven met 10 symbolen: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Er zijn er 10 cijfers, dus het systeem wordt decimaal genoemd.

Maar programmeurs zijn grote uitvinders. Ze kwamen meteen met coderingen die een ander aantal symbolen gebruiken. Bijvoorbeeld 16, 8 en 2.

De alternatieve codering die 8 symbolen gebruikt, is het gemakkelijkst: laat gewoon de 8 en 9 vallen en je krijgt een octale codering (het octale cijfersysteem ).

En ja, u kunt het octale systeem gebruiken om numerieke literals te specificeren. Als het echt nodig is natuurlijk. Het is makkelijker dan het klinkt. U hoeft alleen het cijfer 0 voor het nummer te schrijven.

Met andere woorden, Java behandelt elk geheel getal dat begint met 0 als een octale waarde.

Voorbeelden:

Code Notities
int x = 015;
x is 13: 1*8+5
int x = 025;
x is 21: 2*8+5
int x = 0123;
x is 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Dit zal niet compileren: 8 is niet een van de symbolen die worden gebruikt in de octale codering.

Het is onwaarschijnlijk dat u octale getallen in uw code moet schrijven, maar u moet weten wat ze zijn. U zult immers code moeten lezen die door anderen is geschreven. En zoals hierboven vermeld, zijn programmeurs grote uitvinders.

Onthoud dat je niet zomaar een 0 voor elk nummer kunt schrijven.



2. Binaire codering

Binaire codering is nog interessanter. Als octaal alleen de cijfers 0-7 heeft, dan heeft binair alleen 0 en 1. Waarom is deze codering nodig?

Dit heeft alles te maken met de interne structuur van een computer. Alles in een computer werkt op elektriciteit, en de meest efficiënte manier om iets op te slaan en te verzenden met behulp van elektriciteit is om twee toestanden te gebruiken: ofwel is er geen elektriciteit in de draad (nul) en is er elektriciteit (één).

Dit is de oorsprong van de populariteit van het binaire cijfersysteem.

In Java wordt het in principe niet vaak gebruikt: Java wordt beschouwd als een taal op hoog niveau, volledig geabstraheerd van de hardware waarop het draait. Maakt het u echt uit welk formaat wordt gebruikt om gegevens op een computer op te slaan en te verwerken?

Maar in de afgelopen decennia zijn programmeurs dol geworden op de binaire codering (en andere daarop gebaseerde coderingen). Als gevolg hiervan heeft Java operators die binaire getallen als invoer gebruiken. En de nauwkeurigheid van getallen met drijvende komma hangt af van hun binaire weergave.

Kortom, het is beter voor u om van deze codering af te weten dan om het niet te weten.

En zoals het geval was met octale codering, heeft Java een manier om letterlijke waarden te coderen met behulp van het binaire systeem. Dat wil zeggen, letterlijke getallen bestaan ​​alleen uit 0-en en 1-en. Om ervoor te zorgen dat de Java-compiler begrijpt dat de code een numerieke letterlijke code bevat die is gecodeerd in binair in plaats van alleen een decimaal getal bestaande uit nullen en enen, worden alle binaire letterlijke waarden geïdentificeerd met het voorvoegsel 0b (de ' b ' komt van het woord binair) .

Voorbeelden:

Code Notities
int x = 0b100;
х is 4: 1*4+0*2+0
int x = 0b1111;
х is 15: 1*8+1*4+1*2+1
int x = 0b1111000111;
х is 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;
Dit zal niet compileren: 2 is niet een van de symbolen die worden gebruikt in de binaire codering.


3. Hexadecimale codering

Naast octale en binaire coderingen kunnen letterlijke getallen ook in hexadecimaal worden geschreven. Dit is een zeer populaire codering.

Dat komt omdat, hoewel binaire notatie zo dicht mogelijk bij de manier komt waarop getallen daadwerkelijk worden opgeslagen, het voor mensen te moeilijk is om effectief met dergelijke getallen te werken: in binair getal bevat het getal één miljoen 20 cijfers, niet 7.

Daarom bedachten programmeurs het hexadecimale systeem. 16 is immers 2 verheven tot de 4e macht, dus exact 4 bits komen overeen met één hexadecimaal cijfer. Ruwweg kan elke 4 bits nu worden geschreven als een enkel hexadecimaal cijfer.

De hexadecimale codering heeft ook zijn eigen unieke prefix: 0x . Voorbeelden:

Decimaal getal Binaire notatie Hexadecimale notatie
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é, zeg je, het is duidelijk genoeg hoe we aan het octale systeem zijn gekomen: we hebben zojuist de getallen 8 en 9 weggegooid, maar waar halen we de 6 extra symbolen voor het hexadecimale systeem vandaan? Ik zou ze graag willen zien!

Het is allemaal eenvoudig. De eerste 6 letters van het Engelse alfabet werden genomen als de 6 ontbrekende symbolen: A (10), B (11), C (12), D (13), E (14), F (15).

Voorbeelden:

Hexadecimale notatie Binaire notatie Decimaal getal
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 een F 0b 1010 1111 175
0x F F 0b 1111 1111 255
0x F F F 0b 1111 1111 1111 4095


4. Hoe een getal van hexadecimaal te converteren

Het omzetten van een getal van hexadecimaal naar decimaal is heel eenvoudig. Laten we zeggen dat je het getal 0 x A F C F hebt . Hoeveel is dat in decimalen?

Ten eerste hebben we een positiegetalsysteem, wat betekent dat de bijdrage van elk cijfer aan het totale getal met een factor 16 toeneemt als we van rechts naar links gaan:

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

Het symbool A komt overeen met het cijfer 10, de letter C komt overeen met het cijfer 12 en de letter F staat voor vijftien. We krijgen:

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

Als we 16 verhogen tot de verschillende machten die overeenkomen met de cijfers, krijgen we:

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

We sommen alles op en krijgen:

45007

Je weet hoe dit nummer in het geheugen wordt opgeslagen:

0x A F C F

Maar laten we het nu converteren naar binair. In binair zou het zijn:

0b 1010 1111 1100 1111

Elke set van vier bits komt overeen met precies één hexadecimaal teken. Dat is superhandig. Zonder enige vermenigvuldiging of machtsverheffen."