剑指offer:不用加减乘除做加法

题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

分析:

  • 不能+、-、*、/,则能用于数字计算的只有位运算
  • 第一步不考虑进位对每一位相加。0+0,1+1都为0,0+1,1+0都为1,这和异或^的运算结果一样。
  • 第二步只考虑进位,对0+1,1+0,0+0都为0,只有1+1为1,并且往左进位为10.
  • 重复上述,直到不进位,即进位数为0。

例子:5+7=12        5:101    7:111  

第一步: 5^7=101^111=010 

第二步:(5&7)<<1=1010

第一步:1010^010=1000

第二步:(1010&010)<<1=100

第一步:1000^100=1100=12

第二步:(1000&100)<<1=0,跳出并返回1100,即12

public int Add(int num1,int num2) {
        while(num2!=0){
            //记录不进位之和
            int temp=num1^num2;
            num2=(num1&num2)<<1;
            num1=temp;
        }
        return num1;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值