其他分享
首页 > 其他分享> > 不用加减乘除进行加减乘除运算

不用加减乘除进行加减乘除运算

作者:互联网

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