Выполнение арифметических операций в двоичном формате с использованием только побитовых операторов [дубликат]

Possible Duplicate:
How can I multiply and divide using only bit shifting and adding?

Я должен написать функции для выполнения двоичного вычитания, умножения и деления без использования арифметических операторов, кроме управления циклом. До сих пор я только писал код на Java, поэтому мне трудно обдумать это.

Начиная с вычитания, мне нужно написать функцию с прототипом

int bsub(int x, int y)

Я знаю, что мне нужно преобразовать y в два дополнения, чтобы сделать его отрицательным, и добавить его в x, но я знаю только, как это сделать, используя один оператор дополнения ~ и добавив 1, но я не могу использовать оператор +

Была предоставлена функция badd, и я смогу реализовать ее в bsub, если смогу выяснить, как сделать y отрицательным числом. Код для badd показан ниже. Заранее спасибо за любые советы.

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;
  }

Ответы на вопрос(2)

Ваш ответ на вопрос