"Er is niets beters dan effectief coderen, Amigo! Vertrouw een oude robot."

'Heb je het over cijfers die door spionnen worden gebruikt?'

"Natuurlijk niet. Ik heb het over het presenteren van informatie in een verteerbare vorm. Over cijfersystemen. U weet dat in het dagelijks leven de meeste mensen het decimale systeem gebruiken. Het gebruikt 10 symbolen om elk getal weer te geven: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Er zijn 10 cijfers, dus het systeem heet decimaal."

"Dat was handig voor mensen met tien vingers. Maar programmeurs zijn grote uitvinders. Ze bedachten meteen coderingen die een ander aantal cijfers gebruiken. Bijvoorbeeld 2, 8, 16 of 64 cijfers. Dat deden ze om maak het handig voor computers, die vertrouwen op 'er is een signaal / er is geen signaal'."

"Ah, ik zie wat ze gemeen hebben... Al deze systemen zijn gebaseerd op machten van twee.

Octale codering

"Goede observatie. Laten we beginnen met een codering met 8 cijfers. Mensen vinden dit misschien het gemakkelijkst: laat gewoon de cijfers 8 en 9 vallen en - boem - je hebt de octale codering (numeriek systeem). Je werd onlangs verteld over letterlijke getallen , toch ?"

"Ja ik was."

"Nou, verrassing! Je kunt numerieke letterlijke getallen instellen met behulp van het octale systeem. Als het natuurlijk echt nodig is. Het is makkelijker dan het klinkt. Zet gewoon een 0 voor het hele getal.

"Dus als een numeriek letterlijk getal begint met nul, betekent dat dan dat het octaal is ?"

"Ja, Java zal het als octaal behandelen.

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 compileert niet: 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 tenslotte code moeten lezen die door anderen is geschreven. En zoals hierboven vermeld, zijn programmeurs grote uitvinders.

Bedenk dat je niet zomaar voor elk cijfer een 0 kunt schrijven."

'Maar als ik van plan ben om het octaal te laten zijn, kan ik dat dan?'

"Ja.

Binaire codering

"Zelfs als je het nog niet begrijpt, is binaire codering je moedertaal. Laat me je eraan herinneren. Als octaal alleen de cijfers 0-7 heeft, dan heeft binair alleen 0 en 1."

"Waarom is deze codering nodig?"

"Zoals ik hierboven al zei, heeft dit 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 er is geen elektriciteit in de draad (nul) en er is elektriciteit (één)."

"Daarom is het zo populair... Hmm, het lijkt erop dat ik me deze taal inderdaad begin te herinneren!"

"Alle robots begrijpen het perfect. Hoewel het niet vaak wordt gebruikt in Java. Java wordt beschouwd als een taal op hoog niveau, volledig geabstraheerd van de hardware waarop het draait. Het kan je inderdaad echt schelen welk formaat wordt gebruikt om gegevens op te slaan en te verwerken binnen een computer?

"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 drijvende-kommagetallen hangt af van hun binaire vertegenwoordiging.

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

'Juist. En net als bij octale codering heeft Java een manier om letterlijke getallen te coderen met behulp van het binaire systeem.'

"Dus ze zullen alleen uit 0-en en 1-en bestaan?"

"Precies. 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 simpelweg een decimaal getal bestaande uit nullen en enen, is het gebruikelijk dat alle binaire letterlijke talen beginnen 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.

Hexadecimale codering

"Wat is twee tot de vierde macht?"

'Zestien. Je hebt de juiste vraag bedacht om een ​​robot te stellen die zover is gekomen als ik!'

"Het lijkt je dat je ver bent gekomen. Hoe dan ook, zestien. Naast octale en binaire coderingen kunnen literals 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 zulke getallen te werken: in binair getal heeft het getal één miljoen 20 cijfers, niet 7.

"Daarom bedachten programmeurs het hexadecimale systeem. Zoals je terecht hebt opgemerkt, is 16 immers 2 verheven tot de 4e macht, dus precies 4 bits komen overeen met één hexadecimaal cijfer.

"Dus elke 4 bits kunnen nu worden geschreven in een enkel hexadecimaal cijfer."

"Juist. 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, dus het is duidelijk genoeg hoe we aan het octale systeem zijn gekomen: we hebben de getallen 8 en 9 gewoon weggegooid. Maar waar halen we de 6 ontbrekende cijfers 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 cijfers: 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 geb 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

"Hoe converteer je een hexadecimaal getal naar een decimaal getal?"

"Het is heel eenvoudig. Laten we zeggen dat je het getal 0 x A F C F hebt. Hoeveel is dat in decimaal? Ten eerste hebben we een positiegetalsysteem, wat betekent dat de bijdrage van elk cijfer aan het totale getal toeneemt met een factor van 16 terwijl we van rechts naar links gaan:

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

Het symbool A komt overeen met het getal 10, de letter C zegt dat we het getal 12 hebben 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

"Nu weet je hoe 45007 in het geheugen is opgeslagen."

"Ja, dat doe ik. Het is 0x A F C F "

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