java 不使用 “+,-,*,/” 运算符计算两个整数的和

    /**
     * 不使用 +,-,* ,/ 计算两个整数的和
     * */
    public  static void testGetAdd(){
        int a = 5;//101
        int b = 7;//111

        while (b!=0){
            int t = a^b;
            System.out.println("testGetAdd a^b binary="+Integer.toBinaryString(t));
            b = (a&b)<<1;
            System.out.println("testGetAdd (a&b)<<1 binary="+Integer.toBinaryString(b));
            a = t;
        }
        /**
         * 1.这一步是通过'异或运算'计算每一位相加后的值,不算进位。a^b
         * 101^111 即:
         * 101
         * 111
         * ----
         * 010
         * *******************
         * 2.得到进位 a&b<<1
         * 101&111 即:
         * 101
         * 111
         * ---
         * 101
         * 计算出结果是对应位相加后需要进位到高位的值,需要左移动一位,以便加到高位上去
         * 101<<1 = 1010
         * ********************
         * 3.然后把两个数字再加一起就是'和',但是相加过程还会有进位,于是循环相加过程即第一步与第二步,直到没有进位
         * (这一步其实就是递归的思路,还是两个数字相加)
         * */

    }



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值