PDA

Visualizza la versione completa : [C] Eseguire una somma algebrica


darksergio
11-10-2011, 22:15
ho scritto questa funzione per la somma algebrica di due interi, ma funziona solo fin quando sono entrambi positivi, come posso fare in modo che funzioni anche con numeri negativi???






int add(int op1,int op2)

{
int sum, carry=1;


while(carry>0)
{
/*vedi tavole verità*/

sum=op1^op2;//uno xor fra i due operatori restituisce la somma senza riporto
carry=(op1)&(op2);//il riporto si ottiene con un and
carry=carry<<1;//il quale viene shiftato fino a diventare 0
op1=sum;
op2=carry;
}

return op1;
}


Grazie a tutti :)

SancheZ
11-10-2011, 22:30
Sinceramente non riesco a capire come uno XOR tra i due operandi possa sostituire un'addizione...

Stefano.

P.S.: chiedo venia, non avevo visto il loop.

darksergio
11-10-2011, 22:33
restituisce una somma parziale, senza l'applicazione dei riporti
che vengono aggiunti con la and ad il risultato dello xor .

ramy89
04-02-2012, 23:00
Per ottenere il resto basta fare l' and tra i due numeri e shiftarlo a sinistra di uno (carry).
Per ottenere invece la somma senza resto basta fare lo xor tra i due numeri (sum).
Ora basta sommare la somma senza resti al carry.
Il problema è che anche quest' ultima somma potrebbe avere resti, per cui:
-Se ci sono resti si chiama ricorsivamente la add;
-Se non ci sono resti si ritorna sum|carry.



int add(int op1,int op2)
{
int carry=((op1&op2)<<1);
int sum=(op1^op2);
if(!(sum&carry))
return sum|carry;
else
return add(sum,carry);
}

oregon
05-02-2012, 11:01
Originariamente inviato da darksergio
come posso fare in modo che funzioni anche con numeri negativi???

Utilizza il "complemento a 2" ...

Loading