[Teoria informatica] Binario puro,Modulo e Segno,Complemento a 2
Ciao a tutti sto studiando da poco informatica e volevo chiarirmi qualche dubbio riguardo al modulo e segno di un binario come si calcola? Inoltre come lo ottengo da una somma tipo questa? 11110101 + 01101101
Vedendo questo esempio di sommatoria mi sono accorto che CA2 = binario puro (CA2=01100010) è sempre così?
Potreste aiutarmi per favore? Grazie per l'attenzione
Vedendo questo esempio di sommatoria mi sono accorto che CA2 = binario puro (CA2=01100010) è sempre così?
Potreste aiutarmi per favore? Grazie per l'attenzione

Risposte
Non è molto chiaro il tuo testo. Esistono diversi metodi per rappresentare numeri interi con segno in binario. Nel caso della codifica con complemento a due si fa il complemento a due dei numeri quando sono negativi. Per riconoscere un numero negativo è sufficiente guardare il bit più significativo: se è zero il numero è positivo, mentre se è uno allora il numero è negativo ed è necessario calcolarne il complemento a due. Nel tuo caso hai quindi che \(11110101_b\) è negativo, mentre \(01101101_b\) è positivo.
Ricordo che per calcolare il complemento a due ci sono due metodi:
1. Inverti tutti i bit e poi sommi uno.
2. Partendo da destra, mantieni invariati tutti i bit fino al primo uno compreso. Dopodiché inverti tutto il resto.
Nel tuo caso hai quindi che \(11110101_b\) è uguale a \(-00001011_b = -11\).
Il principale vantaggio del complemento a due è che la somma non richiede regole separate per i numeri positivi e negativi, funziona infatti in entrambi i casi senza modifiche. Abbiamo infatti che \(11110101_b + 01101101_b = (1)01100010_b\) (facendo la somma come normali numeri binari positivi e ignorato il nono bit del risultato). Abbiamo in effetti che \(11110101_b = 245\), \(01101101_b = 109\) e \(245 + 109 = 354 \mod 256 = 98\). Se facciamo i calcoli ricordandoci della codifica a complemento a due abbiamo che \( -11 + 109 = 98 \) come abbiamo ottenuto in precedenza.
Per riassumere: la codifica a complemento a due consiste nel considerare i numeri nell'intervallo \( [-2^{N-1}, 2^{N-1} - 1] \) e calcolarne la classe di equivalenza modulo \(2^N\) dove \(N\) è il numero di bit. Siccome le operazioni di somma e prodotto vengono calcolate in questa classe di equivalenza tutto funziona come dovrebbe. Spero sia chiaro.
Ricordo che per calcolare il complemento a due ci sono due metodi:
1. Inverti tutti i bit e poi sommi uno.
2. Partendo da destra, mantieni invariati tutti i bit fino al primo uno compreso. Dopodiché inverti tutto il resto.
Nel tuo caso hai quindi che \(11110101_b\) è uguale a \(-00001011_b = -11\).
Il principale vantaggio del complemento a due è che la somma non richiede regole separate per i numeri positivi e negativi, funziona infatti in entrambi i casi senza modifiche. Abbiamo infatti che \(11110101_b + 01101101_b = (1)01100010_b\) (facendo la somma come normali numeri binari positivi e ignorato il nono bit del risultato). Abbiamo in effetti che \(11110101_b = 245\), \(01101101_b = 109\) e \(245 + 109 = 354 \mod 256 = 98\). Se facciamo i calcoli ricordandoci della codifica a complemento a due abbiamo che \( -11 + 109 = 98 \) come abbiamo ottenuto in precedenza.
Per riassumere: la codifica a complemento a due consiste nel considerare i numeri nell'intervallo \( [-2^{N-1}, 2^{N-1} - 1] \) e calcolarne la classe di equivalenza modulo \(2^N\) dove \(N\) è il numero di bit. Siccome le operazioni di somma e prodotto vengono calcolate in questa classe di equivalenza tutto funziona come dovrebbe. Spero sia chiaro.
Grazie mille