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.
codice:
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);
}