"Det er ingenting bedre enn effektiv koding, Amigo! Stol på en gammel robot."

"Snakker du om chiffer brukt av spioner?"

"Selvfølgelig ikke. Jeg snakker om å presentere informasjon i en fordøyelig form. Om tallsystemer. Du er klar over at i hverdagen bruker de fleste desimalsystemet . Det bruker 10 symboler for å representere hvert tall: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Det er 10 tall, så systemet kalles desimal."

"Det var praktisk for mennesker med sine ti fingre. Men programmerere er store oppfinnere. De kom umiddelbart opp med kodinger som bruker et annet antall sifre. For eksempel 2, 8, 16 eller 64 sifre. De gjorde dette for å gjør det praktisk for datamaskiner som er avhengige av 'det er et signal / det er ikke noe signal'."

"Ah, jeg ser hva de har til felles... Alle disse systemene er basert på to potenser.

Oktal koding

"God observasjon. La oss starte med en koding som involverer 8 sifre. Mennesker kan finne dette det enkleste: bare slipp tallene 8 og 9 og — boom — du har den oktale kodingen (tallsystem). Du ble nylig fortalt om bokstaver, ikke sant ?"

"Ja jeg var."

"Vel, overraskelse! Du kan angi numeriske bokstaver kodet ved hjelp av det oktale systemet. Hvis, selvfølgelig, du virkelig trenger det. Det er enklere enn det høres ut. Bare sett 0 foran hele tallet.

"Så hvis en numerisk bokstav begynner med null, betyr det at den er oktal ?"

"Ja, Java vil behandle det som oktalt.

Eksempler:

Kode Notater
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 av symbolene som brukes i den oktale kodingen.

"Det er usannsynlig at du trenger å skrive oktale tall i koden din, men du bør vite hva de er. "Du må tross alt lese kode skrevet av andre. Og som nevnt ovenfor, er programmerere store oppfinnere.

Vel, husk at du ikke bare kan gå og skrive 0 foran hvert tall."

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

"Ja.

Binær koding

"Selv om du ikke forstår det ennå, er binær koding ditt morsmål. La meg minne deg på det. Hvis oktal bare har sifrene 0-7, så har binær bare 0 og 1."

"Hvorfor er denne kodingen nødvendig?"

"Som jeg nevnte ovenfor, har dette alt å gjøre med den interne strukturen til en datamaskin. Alt i en datamaskin kjører på elektrisitet, og som det skjer, er den mest effektive måten å lagre og overføre noe ved hjelp av elektrisitet på å bruke to tilstander: enten det er ingen elektrisitet i ledningen (null) og det er elektrisitet (en)."

"Det er derfor det er så populært... Hmm, det ser ut til at jeg virkelig begynner å huske dette språket!"

"Alle roboter forstår det perfekt. Selv om det ikke brukes så ofte i Java. Java regnes som et høynivåspråk, fullstendig abstrahert fra maskinvaren det kjører på. Bryr du deg virkelig om hvilket format som brukes til å lagre og behandle data inne i en datamaskin?

"Men i løpet av de siste tiårene har programmerere begynt å elske den binære kodingen (og andre kodinger basert på den). Som et resultat har Java operatører som tar binære tall som innganger. Og nøyaktigheten til flytende tall avhenger av deres binære tall. representasjon.

"Kort sagt, det er bedre for deg å vite om denne kodingen enn å ikke vite."

"Riktig. Og som tilfellet var med oktal koding, har Java en måte å kode bokstaver ved hjelp av det binære systemet."

"Så de vil bare bestå av 0-ere og 1-ere?"

"Akkurat. For at Java-kompilatoren skal forstå at koden inneholder en numerisk bokstavkodet binært i stedet for bare et desimaltall som består av nuller og enere, er det vanlig at alle binære bokstaver begynner med prefikset 0b ('b ' kommer fra ordet binær).

Eksempler:

Kode Notater
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 av symbolene som brukes i den binære kodingen.

Heksadesimal koding

"Hva er to til fjerde potens?"

"Seksten. Du fant ut det rette spørsmålet å stille en robot som har kommet like langt som meg!"

"Det ser ut til at du har kommet langt. Uansett, seksten. I tillegg til oktale og binære kodinger, kan bokstaver også skrives i heksadesimal. Dette er en veldig populær koding.

"Det er fordi selv om binær notasjon er så nært som mulig til hvordan tall faktisk lagres, er det for vanskelig for mennesker å effektivt arbeide med slike tall: i binær, tallet én million 20 sifre, ikke 7.

"Det er derfor programmerere kom opp med det heksadesimale systemet. Tross alt, som du korrekt bemerket, er 16 2 hevet til 4. potens, så nøyaktig 4 biter tilsvarer ett heksadesimalt siffer.

"Så hver 4 bit kan nå skrives i et enkelt heksadesimalt siffer."

"Riktig. Den heksadesimale kodingen har også sitt eget unike prefiks: 0x . Eksempler:

Desimaltall Binær notasjon Heksadesimal notasjon
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 fikk det oktale systemet: vi har nettopp kastet ut tallene 8 og 9. Men hvor får vi tak i de 6 manglende sifrene for det heksadesimale systemet? Jeg vil gjerne se dem!"

"Det hele er enkelt. De første 6 bokstavene i det engelske alfabetet ble tatt som de 6 manglende sifrene: A (10), B (11), C (12), D (13), E (14), F (15) .

Eksempler:

Heksadesimal notasjon Binær notasjon Desimaltall
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 1. 3
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 heksadesimalt tall til desimaltall?"

"Det er veldig enkelt. La oss si at du har tallet 0 x A F C F. Hvor mye er det i desimal? For det første har vi et posisjonelt tallsystem, som betyr at bidraget til hvert siffer til det totale tallet øker med en faktor på 16 mens vi beveger oss fra høyre til venstre:

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

Symbolet A tilsvarer tallet 10, bokstaven C sier at vi har tallet 12, og bokstaven F representerer femten. Vi får:

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

Ved å heve 16 til de forskjellige potensene som tilsvarer sifrene, får vi:

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

Vi oppsummerer alt og får:

45007

"Nå vet du hvordan 45007 er lagret i minnet."

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

"La oss nå konvertere den til binær. I binær vil det være:

0b 1010 1111 1100 1111

"Hvert sett med fire biter tilsvarer nøyaktig ett heksadesimalt tegn. Det er veldig praktisk. Uten noen form for multiplikasjon eller eksponentiering."