Salta al contenuto
Note per Studenti Sistemi di numerazione posizionali

Sistemi di numerazione posizionali

In questa pagina 6
In questa pagina 3

Notazione posizionale

In base bb si usano le cifre 0,…,b−10, \dots, b-1 e ogni cifra pesa una potenza di bb che dipende dalla posizione:

(cn−1…c1c0,c−1…c−m)b=∑i=−mn−1ci bi(c_{n-1} \dots c_1 c_0 , c_{-1} \dots c_{-m})_b = \sum_{i=-m}^{n-1} c_i \, b^i

  • La cifra più a sinistra è la più significativa (MSB per i bit), quella più a destra la meno significativa (LSB).
  • Con nn cifre in base bb si scrivono bnb^n numeri diversi: da 00 a bn−1b^n - 1. Con nn bit: da 00 a 2n−12^n-1 (8 bit → 0…255).
  • Viceversa, per rappresentare NN valori distinti servono ⌈log⁡2N⌉\lceil \log_2 N \rceil bit (1000 valori → 10 bit, perché 210=10242^{10}=1024).
Base Nome Cifre Uso
2 binaria 0, 1 rappresentazione interna
8 ottale 0–7 abbreviazione di gruppi di 3 bit
10 decimale 0–9 uso umano
16 esadecimale 0–9, A–F (A=10 … F=15) abbreviazione di gruppi di 4 bit, indirizzi, byte

Da base bb a base 10

Si applica la definizione (somma dei pesi):

1011,012=1⋅23+0⋅22+1⋅21+1⋅20+0⋅2−1+1⋅2−2=8+2+1+0,25=11,251011{,}01_2 = 1\cdot 2^3 + 0 \cdot 2^2 + 1\cdot 2^1 + 1\cdot 2^0 + 0\cdot 2^{-1} + 1 \cdot 2^{-2} = 8+2+1+0{,}25 = 11{,}25

2F16=2⋅16+15=471578=1⋅64+5⋅8+7=1112\text{F}_{16} = 2 \cdot 16 + 15 = 47 \qquad 157_8 = 1\cdot 64 + 5 \cdot 8 + 7 = 111

Da base 10 a base bb: parte intera

Divisioni successive per bb: i resti, letti dall'ultimo al primo, sono le cifre da sinistra a destra. Funziona perché N=q⋅b+c0N = q \cdot b + c_0: il primo resto è la cifra meno significativa.

Esempio: 156156 in base 2.

Divisione Quoziente Resto
156 : 2 78 0 (c0c_0)
78 : 2 39 0
39 : 2 19 1
19 : 2 9 1
9 : 2 4 1
4 : 2 2 0
2 : 2 1 0
1 : 2 0 1 (c7c_7)

156=100111002156 = 10011100_2. Controllo: 128+16+8+4=156128 + 16 + 8 + 4 = 156.

Più veloce a mano: sottrarre la potenza di 2 più grande che ci sta (156−128=28156 - 128 = 28, 28−16=1228 - 16 = 12, 12−8=412 - 8 = 4, 4−4=04 - 4 = 0 → bit 7, 4, 3, 2 a 1).

Da base 10 a base bb: parte frazionaria

Moltiplicazioni successive per bb: a ogni passo la parte intera del prodotto è la cifra successiva dopo la virgola, e si prosegue con la sola parte frazionaria.

Esempio: 0,3750{,}375 in base 2.

Prodotto Parte intera (cifra) Resta
0,375⋅2=0,750{,}375 \cdot 2 = 0{,}75 0 (c−1c_{-1}) 0,75
0,75⋅2=1,50{,}75 \cdot 2 = 1{,}5 1 (c−2c_{-2}) 0,5
0,5⋅2=1,00{,}5 \cdot 2 = 1{,}0 1 (c−3c_{-3}) 0 → fine

0,375=0,01120{,}375 = 0{,}011_2 (infatti 14+18\tfrac14 + \tfrac18).

Numeri periodici. Un numero è finito in base 2 solo se è della forma k/2jk/2^j. 0,10{,}1 non lo è:

0,1→0,2 (0)→0,4 (0)→0,8 (0)→1,6 (1)→1,2 (1)→0,4 (0)→…0{,}1 \to 0{,}2\ (0) \to 0{,}4\ (0) \to 0{,}8\ (0) \to 1{,}6\ (1) \to 1{,}2\ (1) \to 0{,}4\ (0) \to \dots

da qui la sequenza si ripete: 0,1=0,00011‾20{,}1 = 0{,}0\overline{0011}_2. Con un numero finito di bit va troncato o arrotondato (vedi Numeri in virgola mobile IEEE 754Virgola fissa e virgola mobile; formato IEEE 754 a 32 e 64 bit (segno, esponente in eccesso 127, mantissa con 1 implicito); conversioni svolte nei due versi; valori speciali, denormalizzati, intervallo, precisione e arrotondamento.Numeri in virgola mobile IEEE 754 →).

Un numero con parte intera e frazionaria si converte separatamente: 12,375=1100,011212{,}375 = 1100{,}011_2.

Basi potenze di 2: 2 ↔ 8 ↔ 16

Poiché 8=238 = 2^3 e 16=2416 = 2^4, ogni cifra ottale corrisponde a 3 bit e ogni cifra esadecimale a 4 bit. Si raggruppano i bit a partire dalla virgola (a sinistra per la parte intera, a destra per la frazionaria), completando con zeri.

100111002=1001⏟9 1100⏟C=9C16100111002=010⏟2 011⏟3 100⏟4=234810011100_2 = \underbrace{1001}_{9}\,\underbrace{1100}_{\text{C}} = 9\text{C}_{16} \qquad 10011100_2 = \underbrace{010}_{2}\,\underbrace{011}_{3}\,\underbrace{100}_{4} = 234_8

3A,816=0011 1010,10002=111010,12=58,5\text{3A,8}_{16} = 0011\,1010{,}1000_2 = 111010{,}1_2 = 58{,}5

Tra ottale ed esadecimale si passa sempre attraverso il binario.

Errori tipici

  • Leggere i resti delle divisioni dall'alto in basso: il primo resto è l'LSB.
  • Raggruppare a 4 bit partendo da sinistra invece che dalla virgola: 1101012110101_2 è 0011 0101=35160011\,0101 = 35_{16}, non D116D1_{16}.
  • Dimenticare che le cifre frazionarie pesano 2−1=0,52^{-1} = 0{,}5, 2−2=0,252^{-2} = 0{,}25, 2−3=0,1252^{-3} = 0{,}125, …

Versione ripasso

(cn−1…c0,c−1…c−m)b=∑i=−mn−1ci bi(c_{n-1} \dots c_0 , c_{-1} \dots c_{-m})_b = \sum_{i=-m}^{n-1} c_i\, b^i Cifre 0,…,b−10, \dots, b-1; MSB a sinistra, LSB a destra. Con nn cifre si scrivono bnb^n numeri (da 00 a bn−1b^n - 1; 8 bit: 0...255); per NN valori servono ⌈log⁡2N⌉\lceil \log_2 N \rceil bit (1000 valori →\to 10 bit). Basi: 2, 8 (3 bit per cifra), 10, 16 (A = 10, ..., F = 15; 4 bit per cifra).

Verso la base 10

1011,012=8+2+1+0,25=11,251011{,}01_2 = 8 + 2 + 1 + 0{,}25 = 11{,}25; 2F16=2⋅16+15=47\text{2F}_{16} = 2 \cdot 16 + 15 = 47; 1578=64+40+7=111157_8 = 64 + 40 + 7 = 111.

Dalla base 10

Basi 2, 8, 16

Si raggruppano i bit dalla virgola (3 per l'ottale, 4 per l'esadecimale), completando con zeri: 100111002=9C16=234810011100_2 = 9\text{C}_{16} = 234_8; 3A,816=111010,12=58,5\text{3A,8}_{16} = 111010{,}1_2 = 58{,}5. Ottale e esadecimale comunicano passando dal binario.

Errori tipici: leggere i resti dall'alto; raggruppare da sinistra (1101012=0011 0101=3516110101_2 = 0011\,0101 = 35_{16}, non D116\text{D1}_{16}); pesi frazionari 2−1=0,52^{-1} = 0{,}5, 2−2=0,252^{-2} = 0{,}25, 2−3=0,1252^{-3} = 0{,}125.

Lezioni in cui compare

Teoria collegata