位运算

位运算符实现加法

  1. 两个数作异或运算得sum;
  2. 两个数作与运算再左移一位得进位c;
  3. 判断c是否为0,若是,输出sum;如不是,sum与c继续进行3步操作。
public static int getSum(int x, int y){
        int result;
        int sum = x ^ y;
        int carry = (x & y) << 1;
        if(carry!=0){
            result = getSum(sum, carry);
        }else {
            result = sum;
        }
        return result;
    }

位运算符实现减法

减法对减数求补码使减法变为加法即可;

public static int getSub(int x, int y){
        int result;
        int sub = getSum(~y, 1);
        result = getSum(x, sub);
        return result;
    }

位运算符实现乘法

先求乘数和被乘数的绝对值,然后对绝对值得乘数进行被乘数次加法操作,符号有乘数和被乘数异或判断,若小于0,对绝对值求和后的结果求补

 public static int getMul(int x, int y){
        int a = x<0 ? getSum(~x, 1) : x;
        int b = y<0 ? getSum(~y, 1) : y;
        int result = 0;
        int count = 0;
        while (count<a){
            result = getSum(result, b);
            count = getSum(count, 1);
        }
        if((x^y)<0){
            result = getSum(~result, 1);
        }
        return result;
    }

位运算符实现除法

不停的用被除数去减除数,直到被除数小于除数时,此时所减的次数就是我们需要的商,而此时的被除数就是余数。唯一需要注意的就是商的符号和余数的符号。商的符号确定方式也乘法是一样,即同号为正,异号为负。而余数的符号和被除数的符号是一样的。

public static int getDiv_shang(int x, int y){
        int a = x<0 ? getSum(~x, 1) : x;
        int b = y<0 ? getSum(~y, 1) : y;
        int yushu = a;
        int shang = 0;
        while (yushu>=b){
            yushu = getSub(yushu, b);
            shang = getSum(shang, 1);
        }
        if((x^y)<0){
            shang = getSum(~shang, 1);
        }

        return shang;
    }
    public static int getDiv_yushu(int x, int y){
        int a = x<0 ? getSum(~x, 1) : x;
        int b = y<0 ? getSum(~y, 1) : y;
        int yushu = a;
        int shang = 0;
        while (yushu>=b){
            yushu = getSub(yushu, b);
            shang = getSum(shang, 1);
        }
        if(x<0){
            yushu = getSum(~yushu, 1);
        }

        return yushu;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值