Sottrazione binaria - Comparazione fra numeri binari

garnak.olegovitc1
Salve a tutti,
nel mio corso di studi sto affrontando le operazioni tra numeri binari senza segno...ed in particolare sto affrontando la sottrazione binaria. Le regole della sottrazione sono:

$0-0=0$
$1-0=1$
$1-1=0$
$0-1=1$ con richiamo di $1$ da sinistra

il numero di bit è indefinito, e mi viene detto di calcolare la sottrazione $10000011-11000000$... ad essere precisi non riesco a capire quale dovrebbe essere il risultato, cioè riesco ad applicare le regole ma sembrerebbe il calcolo non finire mai... Qualcuno potrebbe cortesemente fornirmi una qualche delucidazione in merito.
Ringrazio anticipatamente!

Cordiali saluti

Risposte
probid
Il "problema" è dato dal minuendo minore del sottraendo. È come in decimale, come si fa in questi casi? In pratica, basta invertirli e cambiare il segno alla differenza.

Nella notazione senza segno l'opposto di un numero si ottiene complementando a 2 (nel caso binario).
Questo si fa trasformando gli 0 in 1 e viceversa (complemento a 1) e sommando 1 (complemento a 2), oppure, più velocemente, basta sottrarre a 2 la prima cifra non nulla da destra e a 1 le altre.

Nel caso specifico, avremo $11000000 - 10000011 = 00111101$. Il complemento di $00111101$ è $11000011$ che è la soluzione.

Un'altra idea potrebbe essere quella di evitare la sottrazione considerando che $a - b = a + (-b)$.
In questo caso si calcola il complemento di $11000000$, che è $01000000$, e si somma con $10000011$. Il risultato è lo stesso di sopra.

Saluti!

garnak.olegovitc1
Salve probid,

"probid":
Il "problema" è dato dal minuendo minore del sottraendo. È come in decimale, come si fa in questi casi? In pratica, basta invertirli e cambiare il segno alla differenza.

Nella notazione senza segno l'opposto di un numero si ottiene complementando a 2 (nel caso binario).
Questo si fa trasformando gli 0 in 1 e viceversa (complemento a 1) e sommando 1 (complemento a 2), oppure, più velocemente, basta sottrarre a 2 la prima cifra non nulla da destra e a 1 le altre.

Nel caso specifico, avremo $11000000 - 10000011 = 00111101$. Il complemento di $00111101$ è $11000011$ che è la soluzione.

Un'altra idea potrebbe essere quella di evitare la sottrazione considerando che $a - b = a + (-b)$.
In questo caso si calcola il complemento di $11000000$, che è $01000000$, e si somma con $10000011$. Il risultato è lo stesso di sopra.

Saluti!


quindi devo per forza ricorrere ad altre codifiche per il numero.. non è possibile farlo con le sole regole della sottrazione... :smt023 :smt023
Grazie tanto.
Cordiali saluti

garnak.olegovitc1
Salve probid,
però senza convertire il minuendo ed il sottraendo in base $10$ come mi potrei accorgere che un numero binario è maggiore rispetto ad un altro!!???
Ringrazio anticipatamente!
Cordiali saluti

P.S.=Intanto cambio titolo del post

probid
Anzitutto, la cifra più significativa $1$ indica che il numero è negativo, $0$ che è positivo.
I confronti poi si possono fare intuitivamente considerando che più un bit è a sinistra, maggiore è la potenza di 2 che esso rappresenta.

Comunque il secondo "metodo" sopra è immediato e permette di evitare certi controlli. Ogni volta che c'è una sottrazione, basta complementare il sottraendo per passare alla somma ;)

Saluti!

garnak.olegovitc1
Salve probid,

"probid":
Anzitutto, la cifra più significativa $1$ indica che il numero è negativo, $0$ che è positivo.
I confronti poi si possono fare intuitivamente considerando che più un bit è a sinistra, maggiore è la potenza di 2 che esso rappresenta.

Comunque il secondo "metodo" sopra è immediato e permette di evitare certi controlli. Ogni volta che c'è una sottrazione, basta complementare il sottraendo per passare alla somma ;)

Saluti!


mi sà che per valutare quale dei due sia maggiore o minore li convertirò in base 10 entrambi!!

Cordiali saluti

nessuno.nobody
Perché convertirli in base 10? La soluzione canonica è quella data da probid, la conversione in base 10 è molto più laboriosa da fare ogni volta

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.