【0001】通过使用位运算符实现A+B典型问题

问题描述
在不使用运算符的情况下,实现简单的A+B问题。

重点

  1. 不使用常规运算符 【±×/】
  2. 计算A+B的值

主要考点

  1. 相关二进制位运算
  2. 相关位运算符的使用
  3. 进位计算的基础知识点

算法分析

  1. a+b = (a ^ b) + ( (a & b ) << 1 )
  2. sum = a ^ b;carryBit =(a & b ) << 1
  3. 则可以得到:a+b=sum+carryBit
  4. 由二进制进位规则可知,carryBit在第N次进位后,最终值终为0,则式1可简化为a+b=sum+(0)
  5. 由4可知未知数NcarryBit不为0carryBit始终为正整数)时始终有解
  6. 以此可得出最终结论:a + b = N(由(a & b )进位可得)= 0 => a ^ b

实现代码

public int aplusb(int a,int b){
        while(b!=0){
            /**
             *  a^b(a异或b:a,b中不同则为1,相同则为0)
             *  即13^9 = 【前位补0】100 =  4,不考虑进位
             */
            int sum = a^b; 
            /**
             *  a&b(a位与b:a,b中相同则为1,不同则为0)
             *  即13+9 = 【前位补0】1001 = 9,只考虑进位
             *  不论位与的结果值大值小,进位的最终值始终为0,所以只需要循环进位至0即可
             */
            int carryBit = (a&b) << 1;

            /**
             *  当carryBit进位至0时,a^b即是a+b最终的结果
             */
            a=sum;
            b=carryBit;
       }
       return a;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值