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???

codice:


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