Det är faktiskt inte så krångligt som du tror.
Ett sätt att omvandla ett 4bitars tal är att "låta" den slå över när talet är större än 10, genom att addera 6 (16-10 basen)
exempel:
Kod: Markera allt
bin => BCD
b0000 => b0000 0000 ,0 0
b0001 => b0000 0001 ,0 1
b0010 => b0000 0010 ,0 2
b0011 => b0000 0011 ,0 3
b0100 => b0000 0100 ,0 4
b0101 => b0000 0101 ,0 5
b0110 => b0000 0110 ,0 6
b0111 => b0000 0111 ,0 7
b1000 => b0000 1000 ,0 8
b1001 => b0000 1001 ,0 9
b1010 + b0110 => b0001 0000 ,1 0
b1011 + b0110 => b0001 0001 ,1 1
b1100 + b0110 => b0001 0010 ,1 2
b1101 + b0110 => b0001 0011 ,1 3
b1110 + b0110 => b0001 0100 ,1 4
b1111 + b0110 => b0001 0101 ,1 5
låt oss kolla på 9 och 10
b1001 + b0110 => b1111 ,"9" som du ser här "sätts" inte bit 4 när man addera 9 + 6 (vilket blir F hex)
vilket gör att man kan man kan testa om det är 10 eller högre genom att addera 6 och kolla bit 4.(vilket snabbt kollat på AVR,PIC mm)
Nu är inte så "roligt" att ha bit 4 att kolla på efter som den hamnar utan för "fyra" bitarna (skulle hamna i carry i en 4bit procesor)
Men det går att ganska enkelt att lösa, som du ser så påverkas inte "sista" vilket beror på att man har en gemensamma nämnare mellan de två baserna 10 och 16 nämligen 2
så man kan helt enkelt dela 2 först (en skiftning).
Det ger att man addera 3 istället och titta på bit 3, Det ger en "klar" fördel genom att man alldrig behöver kolla eller ta hänsyn till Carryn.
hoppas att det förklarade lite gran ^^