可能重复:
如何仅使用位移和加法进行乘法和除法?
我必须编写函数来执行二进制减法、乘法和除法,而不使用除循环控制之外的任何算术运算符。我以前只用 Java 编写过代码,所以我很难理解这一点。
从减法开始,我需要用原型写一个函数
int bsub(int x, int y)
我知道我需要将 y 转换为二进制补码才能使其为负并将其添加到 x,但我只知道如何通过使用补码 ~ 运算符并加 1 来做到这一点,但我不能使用 + 运算符。
提供了 badd 函数,如果我能弄清楚如何使 ya 为负数,我将能够在 bsub 中实现它。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;
}