剑指offer48 不用加减乘除做加法


剑指offer48

不用加减乘除做加法

题目描述

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

输入

1,2

输出

3

思路

补充知识:

两个数按位与&结果是进位位

两个数按位异或^结果是非进位位

两个数按位或|结果是两个数合并后的结果

过程:

step1:按位与&是查看两个数哪些二进制位都为1,这些都是进位位,结果需左移一位,表示进位后的结果

step2:异或^是查看两个数哪些二进制位只有一个为1,这些是非进位位,可以直接加、减,结果表示非进位位进行加操作后的结果

step3:n1&n2是查看有没有进位位了,如果有,需要重复step1、step2;如果没有,保留n1、n2上二进制为1的部分,用或|将之合为一个数,即为最后结果

代码

public class Solution {
    public int Add(int num1,int num2) {
        int n1,n2;
        n1=(num1&num2)<<1;
        n2=num1^num2;
        boolean jinwei_flag = (n1&n2)!=0?true:false;
        while(jinwei_flag){
            num1=n1;
            num2=n2;
            n1=(num1&num2)<<1;
            n2=num1^num2;
            jinwei_flag = (n1&n2)!=0?true:false;
        }
        return n1|n2;
    }
}

文章作者: Hailong Gao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Hailong Gao !
评论
  目录