不用加减乘除进行加减乘除运算
作者:互联网
public static int add(int a,int b){
int temp1=a^b;
int temp2=(a&b)<<1;
while (temp2!=0){
int temp=temp1;
temp1=temp1^temp2;
temp2=(temp&temp2)<<1;
}
return temp1;
}
public static int sub(int a,int b){
b=~b+1;
return add(a,b);
}
public static int multi(int a,int b){
int res=0;
int p;
if(((a>>31)^(b>>31))==1){
p=0;
}else {
p=1;
}
a=~(~a|1<<31);
b=~(~b|1<<31);
int t=0;
while (b!=0&&t<31){
if ((b&1)!=0){
res=add(res,a);
}
t++;
a<<=1;
b>>>=1;
}
return ~(~res|p<<31);
}
public static int minus(int a,int b){
return add(a,negNum(b));
}
public static int negNum(int n){
return add(~n,1);
}
public static boolean isNeg(int n){
return n<0;
}
public static int div(int a,int b){
int x=isNeg(a)?negNum(a):a;
int y=isNeg(a)?negNum(b):b;
int res=0;
for (int i=31;-1<i;i=minus(i,1)){
if ((x>>i)>=y){
res|=(1<<i);
x=minus(x,y<<i);
}
}
return isNeg(a)^isNeg(b)?negNum(res):res;
}
标签:return,运算,int,res,不用,temp2,temp1,static,加减乘除 来源: https://www.cnblogs.com/hunhun5201314/p/16061664.html