1. Oktal koding

Apropos kodinger... Som du vet, bruker vi i hverdagen desimalnotasjon : alle tallene våre er representert med 10 symboler: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Det er 10 tall, så systemet kalles desimal.

Men programmerere er store oppfinnere. De kom umiddelbart opp med kodinger som bruker et annet antall symboler. For eksempel 16, 8 og 2.

Den alternative kodingen som bruker 8 symboler er den enkleste: bare slipp 8 og 9 og du får en oktal koding (det oktale tallsystemet ).

Og, ja, du kan bruke det oktale systemet til å spesifisere numeriske bokstaver. Hvis du virkelig trenger det, selvfølgelig. Det er enklere enn det høres ut. Du trenger bare å skrive tallet 0 før tallet.

Med andre ord, Java behandler enhver heltallsliteral som starter med 0 som en oktal verdi.

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. Tross alt må du lese kode skrevet av andre. Og som nevnt ovenfor, er programmerere store oppfinnere.

Vel, husk at du ikke bare kan skrive 0 foran hvert tall.



2. Binær koding

Binær koding er enda mer interessant. Hvis oktal bare har sifrene 0-7, så har binær bare 0 og 1. Hvorfor er denne kodingen nødvendig?

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

Dette er opprinnelsen til populariteten til det binære tallsystemet.

I prinsippet brukes det ikke så ofte i Java: Java regnes som et språk på høyt nivå, 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 input. Og nøyaktigheten til flyttallstall avhenger av deres binære representasjon.

I utgangspunktet er det bedre for deg å vite om denne kodingen enn å ikke vite.

Og som tilfellet var med oktal koding, har Java en måte å kode bokstaver ved hjelp av det binære systemet. Det vil si at bokstaver bare består av 0-er og 1-ere. For at Java-kompilatoren skal forstå at koden inneholder en numerisk bokstav kodet i binært i stedet for bare et desimaltall som består av nuller og enere, identifiseres alle binære bokstaver ved å bruke 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.


3. Heksadesimal koding

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ært inneholder tallet én million 20 sifre, ikke 7.

Det er derfor programmerere kom opp med det heksadesimale systemet. Tross alt er 16 2 hevet til 4. potens, så nøyaktig 4 biter tilsvarer ett heksadesimalt siffer. Grovt sett kan hver 4 bit nå skrives som et enkelt heksadesimalt siffer.

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, sier du, det er tydelig nok hvordan vi fikk det oktale systemet: vi kastet bare ut tallene 8 og 9, men hvor får vi tak i de 6 ekstra symbolene 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 symbolene: 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


4. Hvordan konvertere et tall fra heksadesimalt

Det er veldig enkelt å konvertere et tall fra heksadesimalt til desimaltall. 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 posisjoneltallsystem, som betyr at bidraget fra hvert siffer til det totale tallet øker med en faktor på 16 når 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 tilsvarer 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

Du vet hvordan dette nummeret er lagret i minnet:

0x A F C F

Men 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 super praktisk. Uten noen multiplikasjon eller eksponentiering."