Executando operações aritméticas em binário usando apenas operadores bitwise [duplicados]

Duplicata Possível:
Como posso multiplicar e dividir usando apenas o bit de deslocamento e adição?

Eu tenho que escrever funções para realizar subtração, multiplicação e divisão binárias sem usar nenhum operador aritmético, exceto o controle de loop. Eu só escrevi código em Java antes, então estou tendo dificuldades em entender isso.

Começando com subtração, preciso escrever uma função com protótipo

int bsub(int x, int y)

Eu sei que eu preciso converter y para o complemento de dois para torná-lo negativo e adicioná-lo ao x, mas eu só sei como fazer isso usando o operador complementar e adicionando 1, mas não posso usar o operador +.

A função badd foi fornecida, e eu poderei implementá-la no bsub se puder descobrir como fazer um número negativo y. O código para o badd é mostrado abaixo. Agradecemos antecipadamente por qualquer dica.

int badd(int x,int y){

int i;

char sum;
char car_in=0;
char car_out;
char a,b;

unsigned int mask=0x00000001;
int result=0;

for(i=0;i<32;i++){

  a=(x&mask)!=0;
  b=(y&mask)!=0;
  car_out=car_in & (a|b) |a&b;
  sum=a^b^car_in;

  if(sum) {
     result|=mask;
  }

  if(i!=31) {
     car_in=car_out;
  } else {
     if(car_in!=car_out) {
        printf("Overflow occurred\n");
     }
  }

  mask<<=1;
  }

 return result;
  }

questionAnswers(2)

yourAnswerToTheQuestion