ecco la somma...nn sn cm ci sia riuscita cmq esce
codice:int temp=0; //contiene il risultato della somma di due bit int tot=0; //totale int Bit=1; //utilizzato per azzerare i bit di un numero int Carry=0; //riporto int Position=1; //indica la posizione in cui va shiftato il carry int somma_bit_bit(int first, int second) //La funzione esegue la somma fra due bit e ne restituisce il risultato { first = first & Bit; /*vengono azzerati tutti i bit tranne quello dove è presente 1 */ second= second & Bit; if(Carry!=0) //se il riporto non è uguale a 0 { temp=first^second^Carry; //viene effettuata la somma fra i due bit //con il riporto if(first==0 && second==0) //se il 1° BIT=0 ed il 2° BIT=0 Carry=0; //allora non vi è riporto al bit successivo else { Carry = 1; /vi è riporto al bit successivo e tale Carry=Carry<<Position; //riporto viene shiftato di n posizioni // per essere sommato al bit giusto } Position++; //la posizione del riporto viene increm. al bit succ. Bit=Bit<<1; //bit viene shiftato a sinistra di una posizione //per l'AND succ. return temp; //viene restituita la somma fra i due bit esaminati } if(Carry==0) //se il riporto è uguale a 0 { temp=first^second^Carry; //viene effettuata la somma fra i due //bit con l'aggiunta del riporto if(first!=0 && second !=0) //se il 1° BIT=0 ed il 2° BIT=0 { Carry=1; //vi è riporto al bit successivo Carry=Carry<<Position; //e tale riporto viene shiftato di n posizioni //per essere sommato alla prossima iterazione } else Carry = 0; //altrimenti non vi è riporto al bit successivo Position++; //la posizione del riporto viene incrementata //al bit successivo Bit=Bit<<1; //bit viene shiftato a sin. di una posizione //per l'AND della prossima iterazione. return temp; //viene restituita la somma fra i due bit presi //in esame } } void main(void) { int num1; //Primo addendo da inserire int num2; // Secondo addendo da inserire int count; //contatore int risp; do { cout<<"1) Somma Algebrica fra due numeri\n"; cout<<"2) Esci\n\n"; cout<<"Digita la tua scelta: "; cin>>risp; switch(risp) { case 1: { cout<<"\nInserisci il 1° numero: "; cin>>num1; cout<<"Inserisci il 2° numero: "; cin>>num2; //NB:1byte=8bit--->int=4byte--->int=32bit for(count=1; count <= sizeof(int)*8; count++) { tot = tot + somma_bit_bit(num1, num2); /*viene calcolato il totale come somma dei risultati parziali ottenuti dalla funzione somma_bit_bit iterata per 16 volte, tanto quanto la grandezza di un intero in C++*/ } cout<<"\n Totale: "<<tot<<"\n\n"; /*REINIZIALIZZAZIONE DI TUTTE LE VARIABILI PER LA SOMMA SUCCESSIVA*/ temp=0; tot=0; Bit=1; Carry=0; Position=1; break; } case 2: continue; default: cout<<"RISPOSTA ERRATA\n\n"<< num1; break; } } while(risp!=2); }
scusate l'ho scritto in maniera disordinata

Rispondi quotando