Notazione per numeri binari come 1000100B - 1

"Ciao, Amico!"

"Ciao Bilaabo!"

"Voglio parlarti un po' dei diversi sistemi di numerazione."

"Hai già sentito che le persone usano il sistema decimale. Ecco i fatti principali di questo sistema:

1)  Per scrivere i numeri si usano 10 cifre: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

2)  Il numero 543 significa 5 centinaia + 4 decine + 3 unità.

"Ciò equivale a scrivere 5*100 + 4*10 + 3*1, che può essere scritto come 5*10 2 + 4*10 1 + 3*10 0 .

Nota che migliaia, centinaia, decine e unità sono potenze del numero 10.

1) Uno è 10 elevato allo zero.

2)  Dieci fa 10 alla prima potenza.

3) Cento fa 10 alla seconda potenza.

4)  Mille fa 10 in terza potenza, ecc.

"Sì. Capito."

"Ma ora immagina di avere solo 8 cifre. Quindi abbiamo il sistema ottale. Ecco i fatti principali:"

1)  Si usano 8 cifre per scrivere i numeri: 0, 1, 2, 3, 4, 5, 6, 7.

2)  Il numero 543 8 significa 5*8 2 +4*8 1 +3*8 0 . In altre parole, è 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10

Ho scritto 8 e 10 come pedici per indicare quante cifre sono usate per rappresentare il numero.

"Penso di aver capito. Penso di poter convertire un numero dal sistema ottale a quello decimale. Ma probabilmente non potrei andare dall'altra parte."

"Non è così difficile. Immagina di dover utilizzare diversi camion per spostare un mucchio di sabbia. Hai autocarri con cassone ribaltabile, camion normali e camion molto piccoli. Ma i camion non possono andare se non sono pieni."

"Come lo faresti?"

"Prima riempivo i camion ribaltabili, dato che sono i più grandi. Poi, quando vedevo che non c'era abbastanza sabbia per riempire il camion, passavo ai veicoli più piccoli. E poi a quelli ancora più piccoli".

"In realtà qui è molto simile. Proviamo a riconvertire il numero 355 10 in ottale."

"Per prima cosa, lo dividiamo per 64 (8 2 ) e otteniamo 5 con un resto di 35. Ciò significa che la prima cifra del nostro numero è 5. Quindi dividiamo il resto per 8 (8 1 ) e otteniamo 4 con un resto di 3. Quindi, otteniamo il numero 543 8 ."

"A proposito, puoi anche muoverti nella direzione opposta. Dopo tutto, 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. Le nostre "decine" ottali " e "centinaia" devono essere divisi per 8. Quindi, il resto della divisione per 8 saranno le nostre cifre ottali."

"Per prima cosa, dividiamo 355 per 8. Otteniamo 44 con resto di 3. Cioè, 355=44*8+3. E 44 può essere rappresentato come 5*8+4. Quindi, 355= (5*8+ 4)*8+3; Ecco le nostre cifre: 5, 4, 3. Il numero che stiamo cercando è 543 8 ."

"Penso di aver capito, ma avrò bisogno di esercitarmi un po' per capire tutto fino in fondo."

"La programmazione comporta spesso l'utilizzo di numeri con basi diverse (ovvero il numero di cifre utilizzate nel sistema di numerazione). I più popolari sono 2, 8, 10, 16 e 64."

"Ma perché è necessario? Perché abbiamo bisogno di numeri rappresentati da 2, 8, 16 o 64 cifre?"

"Riguarda il modo in cui il processore funziona internamente. Molto semplicisticamente, se la corrente scorre attraverso un filo, allora diciamo che il suo valore è 1; se non c'è corrente, allora il suo valore è 0. Tutti i numeri sono memorizzati nelle celle di memoria. Questi le celle hanno un design molto semplice e possono memorizzare solo 0 o 1."

"Ma tale semplificazione (solo 0 o 1) ha permesso di rendere molto piccoli gli elementi all'interno del processore e della memoria. I moderni processori e moduli di memoria includono miliardi di elementi diversi. E la loro area spesso non supera il centimetro quadrato".

"Ehi. Adesso lo so."

"Ora passiamo ai numeri binari. Qui abbiamo la stessa cosa dell'ottale, solo più facile."

1)  Per scrivere i numeri si usano 2 cifre: 0, 1.

2)  Il numero 101 2 significa 1*2 2 + 0*2 1 + 1*2 0 . In altre parole, è 1*4+0*2+1*1 =4+1=51 10

"Sì. Mi ricordo. Una cella, che può avere un valore di 0 o 1, è chiamata bit. Ma non può memorizzare molte informazioni, quindi sono combinate in gruppi di 8. Questi gruppi sono chiamati byte. "

"Esattamente. Un byte è un gruppo di otto bit. Può memorizzare i seguenti valori: 00000000, 00000001, ... 11111111. Questi valori corrispondono ai numeri decimali 0,1, ... 255. Il che ci dà un totale di 256 valori."

Qual è il numero intero più grande in Java? O meglio qual è il suo tipo?

"A long. A long è composto da 8 byte. In altre parole, 64 bit. Può memorizzare valori da -2 63 fino a 2 63 -1.

"Sì. Non toccherò come convertire i numeri da decimale a binario o viceversa. Altrimenti la lezione sarebbe troppo lunga."

"Invece, parliamo un po' di più del sistema esadecimale."

"Sì, è molto interessante. Per i sistemi binario e ottale, abbiamo semplicemente eliminato le cifre, iniziando rispettivamente con due e otto. Ma cosa facciamo qui? Aggiungiamo nuove cifre?"

"Esattamente! Guarda questo:"

1) Si usano 16 cifre per scrivere i numeri: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

2) Il numero 543 16 significa 5*16 2 + 4*16 1 + 3*16 0 . In altre parole, è 5*256+4*16+3*1 = 1280+64+3 = 1347 10

"Quindi, abbiamo appena aggiunto lettere come cifre? O_o"

"Sì. E qual è il grosso problema? Perché inventare nuovi numeri quando le lettere funzionano perfettamente? Dai un'occhiata:"

Cifra esadecimale Valore decimale
0 0
1 1
8 8
9 9
UN 10
B 11
C 12
D 13
E 14
F 15

"Inoltre, non parlerò della conversione da decimale a esadecimale. Ma ecco un fatto interessante. Una cifra esadecimale è rappresentata esattamente da 4 bit, con valori da 0 a 15. Quindi, un byte può essere scritto con otto cifre binarie (0 o 1) o due cifre esadecimali."

"Ecco un esempio:"

Numero decimale Numero binario Numero esadecimale
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 segg

"La rappresentazione esadecimale viene facilmente convertita in binario (e viceversa). Ecco perché la rappresentazione interna in byte di un numero è raramente data in binario (usando 0 e 1) nella programmazione. Sarebbe troppo lungo e difficile da capire. Notazione esadecimale è molto più leggibile e compatto."

"Sono d'accordo. Anche a me è piaciuto."

"A proposito, Java ti consente di scrivere numeri in vari sistemi di numerazione direttamente nel codice:"

Base Caratteristica distintiva Esempi Numeri non validi
2 0b  all'inizio del numero 0b 00001111 0b1111121 _ _ _
8 0  all'inizio del numero 01234343 _ 0 12 8
10 Nessuno 95459 909 a
16 0x  all'inizio del numero 0x 10 e ss 0x 1cgh _

"Ottima lezione. Grazie, Bilaabo."