Fondamenti di informatica - Laurea triennale Informatica/Rappresentazione dei numeri interi
I computer devono rappresentare numeri interi usando un numero finito di bit. Questo rende la rappresentazione “compatibile” con i circuiti digitali, ma introduce anche limiti (per esempio l’overflow, cioè il “superamento” dell’intervallo rappresentabile).
Notazione in complemento a due
[modifica | modifica sorgente]È il sistema più usato nei computer moderni (tipicamente con 32 bit, qui si usano esempi a 4 bit per semplicità).
Come sono distribuiti i valori
[modifica | modifica sorgente]- Ogni numero è rappresentato da un pattern di bit a lunghezza fissa.
- Il bit più a sinistra indica il segno (sign bit):
- 0 → valore non negativo (0 e positivi)
- 1 → valore negativo
- Con 4 bit, l’intervallo è da −8 a +7.
Relazione tra +x e −x
[modifica | modifica sorgente]C’è una relazione pratica tra il pattern di un numero positivo e quello del corrispondente negativo:
- letti da destra, sono uguali fino al primo 1 (incluso),
- i bit rimanenti a sinistra sono complementati (0↔1).
Da qui deriva un metodo per ottenere il negativo di un numero (a parità di bit):
- copia i bit da destra fino a includere il primo 1,
- complementa tutti i bit rimanenti.
Decodifica (da bit a numero)
[modifica | modifica sorgente]- Se il sign bit è 0, si legge come normale binario.
- Se il sign bit è 1, il valore è negativo: si applica la procedura “copia e complementa” per ricavare la magnitudine, poi si mette il segno meno.
Addizione in complemento a due
[modifica | modifica sorgente]Per sommare numeri (anche con segno) si usa la stessa addizione binaria di sempre, con una regola:
- tutti i risultati restano della stessa lunghezza (es. 4 bit),
- l’eventuale riporto finale a sinistra viene scartato (troncato).
Vantaggio chiave: lo stesso circuito di addizione funziona per:
- positivo + positivo
- negativo + negativo
- positivo + negativo
E anche la sottrazione si riconduce a un’addizione:
- a−b=a+(−b) Quindi basta avere un circuito per negare (fare −b) e uno per addizionare.
Il problema dell’overflow
[modifica | modifica sorgente]Con un numero fisso di bit, non tutti i valori sono rappresentabili.
- Con 4 bit, 9 non è rappresentabile: operazioni che dovrebbero dare 9 produrranno un risultato “sbagliato” perché il sistema “gira” dentro l’intervallo.
Overflow = quando un calcolo produce un risultato fuori dall’intervallo rappresentabile.
Nel complemento a due, l’overflow si può rilevare così:
- sommo due positivi e ottengo un risultato con segno negativo → overflow
- sommo due negativi e ottengo un risultato con segno positivo → overflow
Excess notation
[modifica | modifica sorgente]È un altro metodo per rappresentare interi con bit a lunghezza fissa.
Come si costruisce
[modifica | modifica sorgente]- si elencano tutti i pattern di N bit in ordine binario,
- si sceglie come zero il pattern che sta circa a metà (il primo con MSB=1),
- i pattern successivi rappresentano 1,2,3,… e quelli precedenti rappresentano −1,−2,…
Con 4 bit, il sistema mostrato è chiamato excess 8:
- perché, se interpreti il pattern come binario “normale”, ottieni un valore che è sempre maggiore di 8 rispetto al valore “reale” in eccesso.
- Esempio: 1100 è 12 in binario, ma vale 4 in excess 8 (12 − 8 = 4)
- 0000 è 0 in binario, ma vale −8 in excess 8 (0 − 8 = −8)
Differenza importante rispetto al complemento a due: il “bit di segno” risulta invertito rispetto all’intuizione del complemento a due (nella tabella mostrata, i valori negativi cadono nella metà con MSB=0).
Esempi
[modifica | modifica sorgente]Complemento a 2 (4 bit)
[modifica | modifica sorgente]A) Bit → decimale
[modifica | modifica sorgente]Regola rapida
- Se il bit più a sinistra (MSB) è 0 → leggi come binario normale.
- Se MSB è 1 → il numero è negativo:
- fai “copia fino al primo 1 da destra, poi complementa il resto” (equivalente a fare il complemento a 2),
- leggi il risultato come binario → quello è il valore assoluto, poi metti −.
Esempi
0110→ MSB=0 → binario normale = 60101→ MSB=0 → = 51111→ MSB=1 → negativo- “inverti e +1”:
1111inverti →0000, +1 →0001= 1 ⇒ −1
- “inverti e +1”:
1010→ MSB=1 → negativo- inverti:
0101, +1 →0110= 6 ⇒ −6
- inverti:
1000→ MSB=1 → negativo- inverti:
0111, +1 →1000= 8 ⇒ −8 (è il più piccolo con 4 bit)
- inverti:
B) Decimale → bit
[modifica | modifica sorgente]Regola rapida
- Se il numero è ≥ 0: scrivi il binario su 4 bit.
- Se è negativo:
- scrivi il valore assoluto in binario su 4 bit,
- inverti i bit,
- aggiungi 1.
Esempi
- +6 → binario =
0110 - +2 →
0010 - −6
- +6 =
0110 - inverti →
1001 - +1 →
1010⇒ −6 =1010
- +6 =
- −3
- +3 =
0011 - inverti →
1100 - +1 →
1101⇒ −3 =1101
- +3 =
Excess notation (Excess 8, 4 bit)
[modifica | modifica sorgente]Qui con 4 bit l’offset è 8, quindi:
- valore = (bit interpretato come binario) − 8
- bit = (valore + 8) scritto in binario su 4 bit
A) Bit → decimale (excess 8)
[modifica | modifica sorgente]Esempi
1000→ binario 8 → 8 − 8 = 01101→ binario 13 → 13 − 8 = 50011→ binario 3 → 3 − 8 = −50000→ binario 0 → 0 − 8 = −81111→ binario 15 → 15 − 8 = 7
B) Decimale → bit (excess 8)
[modifica | modifica sorgente]Esempi
- 0 → 0 + 8 = 8 →
1000 - +5 → 5 + 8 = 13 →
1101 - −5 → −5 + 8 = 3 →
0011 - +7 → 7 + 8 = 15 →
1111 - −8 → −8 + 8 = 0 →
0000
Confronto lampo sullo stesso pattern (4 bit)
[modifica | modifica sorgente]1101- complemento a 2: MSB=1 → negativo → vale −3
- excess 8: binario 13 → 13−8 = +5
Idee chiave
[modifica | modifica sorgente]- I numeri reali (in senso matematico) sono infiniti, ma il computer usa rappresentazioni finite.
- Gli interi hanno un minimo e massimo rappresentabile in base ai bit disponibili.
- Le operazioni possono causare overflow, producendo risultati errati se non gestiti.
- Il complemento a due è molto efficiente perché unifica addizione e sottrazione tramite la stessa logica hardware.
- La notazione in eccesso rappresenta i numeri tramite uno shift (offset) costante.