1. Codificare octală

Apropo de codificări... După cum știți, în viața de zi cu zi folosim notația zecimală : toate numerele noastre sunt reprezentate cu 10 simboluri: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Sunt 10. numerale, deci sistemul se numește zecimal.

Dar programatorii sunt inventatori mari. Au venit imediat cu codificări care folosesc un număr diferit de simboluri. De exemplu, 16, 8 și 2.

Codificarea alternativă care folosește 8 simboluri este cea mai ușoară: doar lăsați 8 și 9 și obțineți o codificare octală (sistemul de numeral octal ).

Și, da, puteți folosi sistemul octal pentru a specifica literale numerice. Dacă, desigur, chiar ai nevoie. E mai ușor decât pare. Trebuie doar să scrieți numărul 0 înaintea numărului.

Cu alte cuvinte, Java tratează orice literal întreg care începe cu 0 ca o valoare octală.

Exemple:

Cod Note
int x = 015; 
x este 13: 1*8+5
int x = 025; 
x este 21: 2*8+5
int x = 0123; 
x este 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Aceasta nu va compila: 8 nu este unul dintre simbolurile utilizate în codificarea octală.

Este puțin probabil să aveți nevoie să scrieți numere octale în codul dvs., dar ar trebui să știți care sunt acestea. La urma urmei, va trebui să citiți codul scris de alții. Și așa cum am menționat mai sus, programatorii sunt mari inventatori.

Ei bine, amintiți-vă că nu puteți scrie pur și simplu 0 în fața fiecărui număr.



2. Codificare binară

Codificarea binară este și mai interesantă. Dacă octalul are doar cifrele 0-7, atunci binarul are doar 0 și 1. De ce este necesară această codificare?

Acest lucru are totul de-a face cu structura internă a unui computer. Totul dintr-un computer funcționează cu energie electrică și, după cum se întâmplă, cel mai eficient mod de a stoca și transmite ceva folosind electricitate este să folosești două stări: fie nu există electricitate în fir (zero) și există electricitate (una).

Aceasta este originea popularității sistemului numeric binar.

În principiu, nu este folosit foarte des în Java: Java este considerat un limbaj de nivel înalt, complet abstractizat de hardware-ul pe care rulează. Într-adevăr, îți pasă cu adevărat ce format este folosit pentru stocarea și procesarea datelor în interiorul unui computer?

Dar în ultimele decenii, programatorii au ajuns să iubească codificarea binară (și alte codificări bazate pe aceasta). Ca rezultat, Java are operatori care iau numere binare ca intrări. Iar acuratețea numerelor în virgulă mobilă depinde de reprezentarea lor binară.

Practic, este mai bine pentru tine să știi despre această codificare decât să nu știi.

Și așa cum a fost cazul codării octale, Java are o modalitate de a codifica literalele folosind sistemul binar. Adică, literalele constau numai din 0 și 1. Pentru ca compilatorul Java să înțeleagă că codul conține un literal numeric codificat în binar, mai degrabă decât un simplu număr zecimal format din zerouri și unu, toate literalele binare sunt identificate folosind prefixul 0b („b” provine din cuvântul binar) .

Exemple:

Cod Note
int x = 0b100; 
х este 4: 1*4+0*2+0
int x = 0b1111; 
х este 15: 1*8+1*4+1*2+1
int x = 0b1111000111; 
х este 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;
Aceasta nu va compila: 2 nu este unul dintre simbolurile utilizate în codificarea binară.


3. Codificare hexazecimală

Pe lângă codificările octale și binare, literalele pot fi scrise și în hexazecimal. Aceasta este o codificare foarte populară.

Asta pentru că, deși notația binară este cât mai apropiată de modul în care sunt stocate efectiv numerele, este prea dificil pentru oameni să lucreze eficient cu astfel de numere: în binar, numărul un milion conține 20 de cifre, nu 7.

De aceea, programatorii au venit cu sistemul hexazecimal. La urma urmei, 16 este 2 ridicat la a 4-a putere, deci exact 4 biți corespund unei cifre hexazecimale. Aproximativ vorbind, fiecare 4 biți poate fi acum scris ca o singură cifră hexazecimală.

Codificarea hexazecimală are și propriul prefix unic: 0x . Exemple:

Numar decimal Notație binară Notație hexazecimală
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, spuneți, este destul de clar cum am obținut sistemul octal: tocmai am aruncat numerele 8 și 9, dar de unde obținem cele 6 simboluri suplimentare pentru sistemul hexazecimal? As vrea sa le vad!

Totul este simplu. Primele 6 litere ale alfabetului englez au fost luate drept cele 6 simboluri lipsă: A (10), B (11), C (12), D (13), E (14), F (15).

Exemple:

Notație hexazecimală Notație binară Numar decimal
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


4. Cum se transformă un număr din hexazecimal

Convertirea unui număr din hexazecimal în zecimal este foarte ușoară. Să presupunem că aveți numărul 0 x A F C F . Cât este asta în zecimală?

În primul rând, avem un sistem de numere pozițional, ceea ce înseamnă că contribuția fiecărei cifre la numărul total crește cu un factor de 16 pe măsură ce ne deplasăm de la dreapta la stânga:

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

Simbolul A corespunde numărului 10, litera C corespunde numărului 12, iar litera F reprezintă cincisprezece. Primim:

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

Ridicând 16 la diferitele puteri care corespund cifrelor, obținem:

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

Rezum totul și obținem:

45007

Știți cum este stocat acest număr în memorie:

0x A F C F

Dar acum să-l convertim în binar. În binar ar fi:

0b 1010 1111 1100 1111

Fiecare set de patru biți corespunde exact unui caracter hexazecimal. E super convenabil. Fără nicio înmulțire sau exponențiere.”