Notație pentru numere binare precum 1000100B - 1

"Bună, Amigo!"

— Bună, Bilaabo!

„Vreau să vă spun puțin despre diferite sisteme de numerotare”.

„Ați auzit deja că oamenii folosesc sistemul zecimal. Iată principalele fapte ale acestui sistem:

1)  Pentru a scrie numere sunt folosite 10 cifre: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

2)  Numărul 543 înseamnă 5 sute + 4 zeci + 3 unități.

„Acest lucru este echivalent cu scrierea 5*100 + 4*10 + 3*1, care poate fi scris ca 5*10 2 + 4*10 1 + 3*10 0 .

Rețineți că miile, sutele, zecile și unu sunt puteri ale numărului 10.

1) Unu este 10 la puterea zero.

2)  Zece este 10 la prima putere.

3) O sută este 10 la a doua putere.

4)  O mie este 10 la a treia putere etc.

— Da. Am înțeles.

"Dar acum imaginați-vă că avem doar 8 cifre. Apoi avem sistemul octal. Iată principalele sale fapte:"

1)  Pentru a scrie numere se folosesc 8 cifre: 0, 1, 2, 3, 4, 5, 6, 7.

2)  Numărul 543 8 înseamnă 5*8 2 +4*8 1 +3*8 0 . Cu alte cuvinte, este 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10

Am scris 8 și 10 ca indice pentru a indica câte cifre sunt folosite pentru a reprezenta numărul.

"Cred că am înțeles. Cred că aș putea converti un număr din sistemul octal în zecimal. Dar probabil că nu aș putea merge în altă direcție."

"Nu este atât de dificil. Imaginează-ți că trebuie să folosești mai multe camioane pentru a muta o grămadă de nisip. Ai autobasculante, camioane obișnuite și camioane foarte mici. Dar camioanele nu pot merge dacă nu sunt pline."

"Cum ai face-o?"

"În primul rând, umpleam autobasculante, deoarece sunt cele mai mari. Apoi, când vedeam că nu era suficient nisip pentru a umple camionul, treceam la vehiculele mai mici. Și apoi și la cele și mai mici."

"De fapt, este foarte asemănător aici. Să încercăm să convertim numărul 355 10 înapoi în octal."

„În primul rând, îl împărțim la 64 (8 2 ) și obținem 5 cu un rest de 35. Aceasta înseamnă că prima cifră a numărului nostru este 5. Apoi împărțim restul la 8 (8 1 ) și obținem 4 cu un rest. din 3. Astfel, obținem numărul 543 8 ."

„Apropo, te poți deplasa și în cealaltă direcție. La urma urmei, 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. Zecile noastre octale „ și „sute” trebuie împărțite la 8. Prin urmare, restul împărțirii cu 8 vor fi cifrele noastre octale.”

„Mai întâi, să împărțim 355 la 8. Obținem 44 cu un rest de 3. Adică 355=44*8+3. Și 44 poate fi reprezentat ca 5*8+4. Astfel, 355= (5*8+ 4)*8+3; Iată cifrele noastre: 5, 4, 3. Numărul pe care îl căutăm este 543 8. "

„Cred că am înțeles, dar va trebui să exersez puțin pentru a înțelege totul până la urmă”.

„Programarea implică adesea utilizarea numerelor cu baze diferite (adică numărul de cifre utilizate în sistemul de numerotare). Cele mai populare sunt 2, 8, 10, 16 și 64.”

"Dar de ce este necesar acest lucru? De ce avem nevoie de numere reprezentate de 2, 8, 16 sau 64 de cifre?"

„Este vorba despre modul în care procesorul funcționează intern. Foarte simplist, dacă curentul trece printr-un fir, atunci spunem că valoarea lui este 1; dacă nu există curent, atunci valoarea lui este 0. Toate numerele sunt stocate în celule de memorie. Acestea celulele au un design foarte simplu. Și pot stoca doar 0 sau 1."

"Dar o astfel de simplificare (doar 0 sau 1) a făcut posibil ca elementele din interiorul procesorului și ale memoriei să fie foarte mici. Procesoarele și modulele de memorie moderne includ miliarde de elemente diferite. Iar aria lor nu depășește adesea un centimetru pătrat."

"Uau. Acum știu."

"Acum trecem la numere binare. Aici avem același lucru ca și cu octal, doar că mai ușor."

1)  Pentru a scrie numere se folosesc 2 cifre: 0, 1.

2)  Numărul 101 2 înseamnă 1*2 2 + 0*2 1 + 1*2 0 . Cu alte cuvinte, este 1*4+0*2+1*1 =4+1=51 10

„Da. Îmi amintesc. O celulă, care poate avea valoarea fie 0, fie 1, se numește bit. Dar nu poate stoca prea multe informații, așa că sunt combinate în grupuri de 8. Aceste grupuri sunt numite octeți. "

"Exact. Un octet este un grup de opt biți. Poate stoca următoarele valori: 00000000, 00000001, ... 11111111. Aceste valori corespund numerelor zecimale 0,1, ... 255. Ceea ce ne oferă un total de 256 de valori.”

Care este cel mai mare număr întreg din Java? Sau mai degrabă care este tipul ei?

„A long. Un long este format din 8 octeți. Cu alte cuvinte, 64 de biți. Poate stoca valori de la -2 63 până la 2 63 -1.

"Da. Nu voi atinge cum să convertesc numerele din zecimal în binar sau invers. Altfel, lecția ar fi prea lungă."

„În schimb, să mai vorbim puțin despre sistemul hexazecimal”.

"Da, este foarte interesant. Pentru sistemele binar și octal, pur și simplu am scăpat de cifre, începând cu două și, respectiv, opt. Dar ce facem aici? Adăugăm cifre noi?"

"Exact! Uită-te la asta:"

1) Pentru a scrie numere sunt folosite 16 cifre: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

2) Numărul 543 16 înseamnă 5*16 2 + 4*16 1 + 3*16 0 . Cu alte cuvinte, este 5*256+4*16+3*1 = 1280+64+3 = 1347 10

„Deci, tocmai am adăugat litere ca cifre? O_o”

"Da. Și care este marea problemă? De ce să inventezi numere noi când literele funcționează perfect? ​​Verificați:"

Cifra hexazecimală Valoare zecimală
0 0
1 1
8 8
9 9
A 10
B 11
C 12
D 13
E 14
F 15

„Nici nu voi vorbi despre conversia de la zecimal la hexazecimal. Dar iată un fapt interesant. O cifră hexazecimală este reprezentată de exact 4 biți, cu valori de la 0 la 15. Deci, un octet poate fi scris cu opt cifre binare. (0 sau 1) sau două cifre hexazecimale."

„Iată un exemplu:”

Numar decimal Număr binar Număr hexazecimal
0 0000 0000 00
1 0000 0001 01
15 0000 1111 0f
16 0001 0000 10
31 0001 1111 1f
32 0010 0000 20
128 1000 0000 80
129 1000 0001 81
255 1111 1111 ff

„Reprezentarea hexazecimală este ușor convertită în binară (și invers). De aceea, reprezentarea internă în octeți a unui număr este rareori dată în binar (folosind 0 și 1) în programare. Ar fi prea lung și greu de înțeles. Notația hexazecimală este mult mai lizibil și mai compact.”

"Sunt de acord. Chiar și mie mi-a plăcut."

„Apropo, Java vă permite să scrieți numere în diferite sisteme de numerotare direct în cod:”

Baza Trăsătură distinctivă Exemple Numere nevalide
2 0b  la începutul numărului 0b 00001111 0b 11111 2 1
8 0  la începutul numărului 0 1234343 0 12 8
10 Nici unul 95459 909 a
16 0x  la începutul numărului 0x 10 urm 0x 1c gh

— O lecție excelentă. Mulțumesc, Bilaabo.