28/02/14 13:57
perillitommaso
il mio professore mi ha regalato questo pezzetto di codice che è ancora in work in progress, non me l'ha spiegato e piano piano che inizio a capirci qualcosa ci metto qualche commento, manca comunque la somma
#include <stdio.h> #include <stdlib.h> int main() { int a; //numero decimale int b; char abcd[3]; //numero a in bcd char bbcd[3]; //numero b in bcd char aascii[6]; //numero a in ascii char bascii[6]; //numero b in ascii char cbcd[3]; int aabs; // int babs; int asegno;//segno di a int bsegno;//segno di b int asegnobcd; int bsegnobcd; int csegnobcd;//segno di c in bcd int somma; //somma int riporto; //riporto printf("Somme in BCD\n"); printf ("Primo numero? "); scanf ("%d", &a); printf ("Secondo numero? "); scanf ("%d", &b); if (a >= 0) { asegno = 1; asegnobcd = 0x0c; //segno di a in bcd aabs = a; //valore assoluto di a } else { asegno = -1; asegnobcd = 0x0d; aabs = -a; } sprintf (aascii, "%05d", aabs); //stampa il valore assoluto di a in 5 parti, il numero decimale verrà visualizzato a destra dopo gli 0 abcd[0] = (aascii[0] - 0x30) * 16 + (aascii[1] - 0x30); //togliamo 30h per togliere ascii e moltiplichiamo per 16 per schiftare a sinistra di 4 bit abcd[1] = (aascii[2] - 0x30) * 16 + (aascii[3] - 0x30); abcd[2] = (aascii[4] - 0x30) * 16 + asegnobcd; printf ("a=%02x%02x%02x\n", abcd[0], abcd[1], abcd[2]); if (b >= 0) { bsegno = 1; bsegnobcd = 0x0c; babs = b; } else { bsegno = -1; bsegnobcd = 0x0d; babs = -b; } sprintf (bascii, "%05d", babs); bbcd[0] = (bascii[0] & ~(0x30)) * 16 + (bascii[1] & ~(0x30)); bbcd[1] = (bascii[2] & ~(0x30)) * 16 + (bascii[3] & ~(0x30)); bbcd[2] = (bascii[4] & ~(0x30)) * 16 + bsegnobcd; printf ("b=%02x%02x%02x\n", bbcd[0], bbcd[1], bbcd[2]); //somma in bcd if ((abcd[2] & 0x0f) == (bbcd[2] & 0x0f)) { csegnobcd = abcd[2] & 0x0f; } else { if (aabs > babs) { csegnobcd = abcd[2] & 0x0f; } else { csegnobcd = bbcd[2] & 0x0f; } } somma = abcd[2] / 16 + bbcd[2] / 16; if (somma > 9) { riporto = 1; somma = somma - 10; } else { riporto = 0; } cbcd[2] = somma * 16 + csegnobcd; return 0; }
aaa