剑指offer - 不用加减乘除做加法(Java实现)

题目描述:https://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215?tpId=13&&tqId=11201&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

  如图:先看一下 6 + 4 = 10 的二进制运算:
图片说明
  首先可以看出,前 n 位我们在进行加操作的时候相当于按位异或运算(相同为 0, 不同为 1),考虑完了这个问题以后我们就可以考虑此时的进位情况,产生进位的情况有:两个都为 1,相当于按位与操作以后得到了一个 1,然后将这个 1 左移一位就是其前面一位的进位,然后再将按位异或得到的结果与得到的进位情况得到异或运算,直到没有进位产生了为止。由于在计算机中负数是以补码的形式存储的,所以我们在计算负数相加的时候也可以模拟这个过程(无符号整型)。

public class Solution {
    public int Add(int num1,int num2) {
        while(num2 != 0) {
            int val = (num1 & num2) << 1;
            num1 ^= num2; 
            num2 = val;
        }
        return num1;
    }
}
【剑指offer】题目全解 文章被收录于专栏

本专栏主要是刷剑指offer的题解记录

全部评论

相关推荐

SadnessAlex:跟三十五岁原则一样,人太多给这些***惯坏了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务