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 |
---|---|
|
x este 13: 1*8+5 |
|
x este 21: 2*8+5 |
|
x este 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0 |
|
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 |
---|---|
|
х este 4: 1*4+0*2+0 |
|
х este 15: 1*8+1*4+1*2+1 |
|
х 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; |
|
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.”
GO TO FULL VERSION