"Der er intet bedre end effektiv kodning, Amigo! Stol på en gammel robot."

"Snakker du om cifre brugt af spioner?"

"Selvfølgelig ikke. Jeg taler om at præsentere information i en fordøjelig form. Om talsystemer. Du er klar over, at de fleste mennesker i hverdagen bruger decimalsystemet . Det bruger 10 symboler til at repræsentere hvert tal: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Der er 10 tal, så systemet kaldes decimal."

"Det var praktisk for mennesker med deres ti fingre. Men programmører er store opfindere. De fandt straks på kodninger, der bruger et andet antal cifre. For eksempel 2, 8, 16 eller 64 cifre. De gjorde dette for at gør det bekvemt for computere, som er afhængige af 'der er et signal / der er intet signal'."

"Åh, jeg kan se, hvad de har til fælles... Alle disse systemer er baseret på to potenser.

Oktal kodning

"God observation. Lad os starte med en kodning, der involverer 8 cifre. Mennesker kan finde dette det nemmeste: bare slip tallene 8 og 9 og - boom - du har den oktale kodning (talsystem). Du blev for nylig fortalt om bogstaver, ikke sandt ?"

"Ja jeg var."

"Nå, overraskelse! Du kan indstille numeriske bogstaver kodet ved hjælp af det oktale system. Hvis du selvfølgelig virkelig har brug for det. Det er nemmere end det lyder. Bare sæt 0 foran hele tallet.

"Så hvis en numerisk bogstavelig starter med nul, betyder det så at den er oktal ?"

"Ja, Java vil behandle det som oktalt.

Eksempler:

Kode Noter
int x = 015; 
x er 13:1*8+5
int x = 025; 
x er 21:2*8+5
int x = 0123; 
x er 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Dette vil ikke kompilere: 8 er ikke et af de symboler, der bruges i den oktale kodning.

"Det er usandsynligt, at du skal skrive oktale tal i din kode, men du bør vide, hvad de er. "Du bliver trods alt nødt til at læse kode skrevet af andre. Og som nævnt ovenfor er programmører store opfindere.

Nå, husk, at du ikke bare kan gå hen og skrive 0 foran hvert tal."

"Men hvis jeg har tænkt mig, at det skal være oktalt, så kan jeg det?"

"Ja.

Binær kodning

"Selvom du ikke forstår det endnu, er binær kodning dit modersmål. Lad mig minde dig om det. Hvis oktal kun har cifrene 0-7, så har binær kun 0 og 1."

"Hvorfor er denne kodning nødvendig?"

"Som jeg nævnte ovenfor, har dette alt at gøre med den interne struktur af en computer. Alt i en computer kører på elektricitet, og som det sker, er den mest effektive måde at lagre og transmittere noget ved hjælp af elektricitet på at bruge to tilstande: enten der er ingen elektricitet i ledningen (nul), og der er elektricitet (en)."

"Det er derfor, det er så populært... Hmm, det ser ud til, at jeg virkelig begynder at huske dette sprog!"

"Alle robotter forstår det perfekt. Selvom det ikke bruges særlig ofte i Java. Java betragtes som et sprog på højt niveau, fuldstændig abstraheret fra den hardware, det kører på. Er du virkelig ligeglad med hvilket format der bruges til at gemme og behandle data inde i en computer?

"Men i løbet af de sidste årtier er programmører kommet til at elske den binære kodning (og andre kodninger baseret på den). Som et resultat har Java operatører, der tager binære tal som input. Og nøjagtigheden af ​​flydende kommatal afhænger af deres binære tal. repræsentation.

"Kort sagt, det er bedre for dig at vide om denne kodning end ikke at vide."

"Godt. Og som det var tilfældet med oktal kodning, har Java en måde at kode bogstaver ved hjælp af det binære system."

"Så de vil kun bestå af 0'ere og 1'ere?"

"Nøjagtigt. For at Java-kompileren skal forstå, at koden indeholder en numerisk literal kodet i binært i stedet for blot et decimaltal bestående af nuller og enere, er det sædvanligt, at alle binære literaler begynder med præfikset 0b ( ' b ' kommer fra ordet binært).

Eksempler:

Kode Noter
int x = 0b100; 
х er 4: 1*4+0*2+0
int x = 0b1111; 
х er 15: 1*8+1*4+1*2+1
int x = 0b1111000111; 
х er 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;
Dette vil ikke kompilere: 2 er ikke et af de symboler, der bruges i den binære kodning.

Hexadecimal kodning

"Hvad er to til den fjerde potens?"

"Seksten. Du fandt ud af det rigtige spørgsmål at stille en robot, der er kommet så langt som mig!"

"Det ser ud til, at du er nået langt. Anyway, seksten. Ud over oktale og binære kodninger kan bogstaver også skrives i hexadecimal. Dette er en meget populær kodning.

"Det skyldes, at selvom binær notation er så tæt som muligt på, hvordan tal faktisk lagres, er det for svært for mennesker effektivt at arbejde med sådanne tal: i binært, tallet en million 20 cifre, ikke 7.

"Det er derfor, programmører kom med det hexadecimale system. Som du rigtigt bemærkede, er 16 trods alt 2 hævet til 4. potens, så præcis 4 bit svarer til et hexadecimalt ciffer.

"Så hver 4 bit kan nu skrives i et enkelt hexadecimalt ciffer."

"Godt. Den hexadecimale kodning har også sit eget unikke præfiks: 0x . Eksempler:

Decimaltal Binær notation Hexadecimal notation
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, så det er klart nok, hvordan vi fik det oktale system: vi har lige smidt tallene 8 og 9 ud. Men hvor får vi de 6 manglende cifre fra det hexadecimale system fra? Jeg vil gerne se dem!"

"Det hele er ligetil. De første 6 bogstaver i det engelske alfabet blev taget som de 6 manglende cifre: A (10), B (11), C (12), D (13), E (14), F (15) .

Eksempler:

Hexadecimal notation Binær notation Decimaltal
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

"Hvordan konverterer du et hexadecimalt tal til decimal?"

"Det er meget simpelt. Lad os sige, at du har tallet 0 x A F C F. Hvor meget er det i decimal? For det første har vi et positionelt talsystem, hvilket betyder, at hvert ciffers bidrag til det samlede tal stiger med en faktor på 16 mens vi bevæger os fra højre mod venstre:

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

Symbolet A svarer til tallet 10, bogstavet C siger, at vi har tallet 12, og bogstavet F repræsenterer femten. Vi får:

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

Hæver 16 til de forskellige potenser, der svarer til cifrene, får vi:

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

Vi opsummerer alt og får:

45007

"Nu ved du, hvordan 45007 er gemt i hukommelsen."

"Ja, det gør jeg. Det er 0x A F C F "

"Lad os nu konvertere det til binært. I binært ville det være:

0b 1010 1111 1100 1111

"Hvert sæt på fire bit svarer til præcis et hexadecimalt tegn. Det er super praktisk. Uden nogen form for multiplikation eller eksponentiering."