剑指offer系列之四十七:不用加减乘除做加法

位运算求和
本文介绍了一种不使用基本算术运算符实现两个整数相加的方法。通过位运算中的异或和与运算来完成加法操作,具体步骤包括:首先使用异或运算计算不考虑进位情况下的和;然后通过与运算并左移一位得到进位值;最后将这两个结果进行运算得到最终答案。

题目描述

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

既然不能使用加减乘除,那么只剩下位运算和逻辑运算了。采用位运算的思路分为三步走:第一步,不进位对两个做异或运算(因为不考虑进位,1与1,0与0的异或运算的结果刚好是两者相加的结果);第二步,通过与运算得到两个数的进位值,因为只有1与1进行与运算的时候才会产生进位,所以产生的进位可以看成是两者先进行与运算再左移一位;第三步,把前两步的结果做与运算得到最后的结果。个人觉得这种思路是在是太赞了。OK,事就成了。下面是这种思路的实现代码(已被牛客AC):

package com.rhwayfun.offer;

/**
 * 不使用操作运算符
 * 
 * @author Administrator
 *
 */
public class CalcSumNoOperation {

    public int Add(int num1, int num2) {
        int sum = 0;
        int carray = 0;
        while(num2 != 0){
            sum = num1 ^ num2;
            carray = (num1 & num2) << 1;

            num1 = sum;
            num2 = carray;
        }
        return num1;
    }

    public static void main(String[] args) {
        int a = new CalcSumNoOperation().Add(2, 9);
        System.out.println(a);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值