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