Выполнение арифметических операций в двоичном формате с использованием только побитовых операторов [дубликат]
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;
}