| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| conv_bin_bcd [2018/03/07 18:11] – admin | conv_bin_bcd [2018/03/07 18:48] (current) – admin |
|---|
| * si interpretano i 4 bit dell'ultima cifra in binario naturale. | * si interpretano i 4 bit dell'ultima cifra in binario naturale. |
| * se il numero risultante è minore di 5, si esegue uno shift a sinistra del gruppo di 4 bit | * se il numero risultante è minore di 5, si esegue uno shift a sinistra del gruppo di 4 bit |
| * se il numero risultante è maggiore o uguale a 5 si esegue in binario naturale l'operazione 2x(c+3); i 4 bit meno significativi del risultato sono usati come cifra BCD meno significativa, alla cifra più significativa della rappresentazione BCD si assegna la stringa "0001". | * se il numero risultante è maggiore o uguale a 5 si esegue in binario naturale l'operazione 2x(c+3); i 4 bit meno significativi del risultato sono usati come cifra BCD meno significativa, alla cifra più significativa della rappresentazione BCD si assegna la stringa "0001". A questo risultato si giunge anche se si somma 3 (in binario naturale) alla cifra a si fa uno schift a sinistra dell'intera stringa di bit mettendo a 0 il bit più a destra. |
| |
| Resta da vedere se è possibile generalizzare l'operazione a numeri rappresentati in BCD con un numero qualunque di cifre (sempre nell'ipotesi che il doppio del numero dato sia rappresentabile sullo stesso numero di cifre). | Resta da vedere se è possibile generalizzare l'operazione a numeri rappresentati in BCD con un numero qualunque di cifre (sempre nell'ipotesi che il doppio del numero dato sia rappresentabile sullo stesso numero di cifre). |
| | |
| Facciamo riferimento al seguente schema di calcolo che mette in evidenza il fatto che la moltiplicazion per 2 non è altro che il risultato della somma di un numero per se setesso: | Per fare questo immaginiamo che quanto fatto fino ad ora fosse in realtà riferito a un numero rappresentato in BCD su tre cifre con la prima cifra pari a zero, la seconda cifra che svolge il ruolo della seconda cifra nel caso precedente e la terza cifra con valore qualunque. |
| | |
| | Ora pensiamo al fatto che moltiplicare per 2 un numero significa sommarlo a se stesso e pensiamo all'algoritmo per la somma imparato alle elementari. Perché partiamo dalla colonna più a destra dopo aver incolonnato i numeri? perché per calcolare la cifra immediatamente a destra ci serve sapere se c'è riporto dalla colonna che stiamo esaminando. Se sapessimo che, nel caso di un numero a tre cifre (con la prima cifra 0), la somma sulla colonna più a destra non genera riporto, potremmo calcolare le 2 cifre più a sinistra senza bisogno di effettuare la somma sulla colonna più a destra. In questo caso ricadremmo nel caso dell'esempio fatto in precedenza del numero a due sole cifre. Quando questo succede, il bit meno significativo della codifica BCD della seconda cifra da destra della somma è sicuramente '0'. Inoltre, qualunque sia la il valore della seconda cifra da destra degli addendi, visto che stiamo facendo la somma di due cifre uguali (in assenza di riporto), il valore della cifra della somma nella colonna corrispondente è certamente pari e quindi inferiore o al più uguale a 8. |
| | |
| | Cosa succede, però, se c'e' riporto dalla prima colonna a destra? Si tratta di sommare 1 alla cifra della somma immediatamente a destra. Questa somma avrà effetto solo sulla cifra immediatamente a destra che, ricordiamo, prima della somma del riporto era certamente inferiore a 9. Si noti anche che, applicando l'algoritmo più sopra descritto (se la cifra è maggiore o uguale a 5 si somma tre e si fa uno shift a sinistra della stringa risultante, il bit più significativo della cifra a sinistra (che è certamente 1 in questo caso) diventa il bit meno significativo della cifra immediatamente a sinistra, cosa che corrisponde effettivamente a sommare uno alla stessa, ovvero a tenere conto del riporto. |
| | |
| | In definitiva, per ottenere la rappresentazione del doppio di un numero con il numero di partenza e di arrivo rappresentati in BCD si procede come segue: |
| | |
| | * si guardano i gruppi di 4 bit di ciascuna cifra come numeri in codifica in binario naturale. |
| | * per ciascun numero (ciascuna cifra), se il valore è maggiore o uguale a 5 si somma 3 (algoritmo di somma in binario naturale) e si sostituiscono i 4 bit risultanti (non ci può essere riporto) a quelli precedenti. |
| | * dopo aver eseguito il punto precedente per tutte le singole cifre, si esegue uno shift a sinistra dell'intera stringa di bit, mettendo a 0 il bit meno significativo. |
| | * i gruppi di bit allineati a 4 a 4 partendo da sinsitra sono le cifre BCD del numero pari al doppio del numero di partenza. |
| | |
| | |
| | Queste considerazioni sono alla base dell'algoritmo di conversione da codifica in binario naturale a BCD che va sotto il nome di "double dabble algorithm" [[https://en.wikipedia.org/wiki/Double_dabble|vedi]]. |
| |
| '' col: N-1 N-2 ..... L+1 L L-1 ..... 1 0 '' | |
| |
| '' '0000' '0101' ..... '0110' '1001' '1000' ..... '0011' '0101' + '' | |
| '' '0000' '0101' ..... '0110' '1001' '1000' ..... '0011' '0101' = '' | |
| '' ------------------------------------------------------------------ '' | |
| |
| |