关闭

位运算实现加法

标签: 位运算实现整数加法
18872人阅读 评论(0) 收藏 举报
分类:

a^b,即a+b,但是没有进位,原因:

  • 0^1 = 1,0+1=1
  • 1^0 = 1,1+0=1
  • 1^1 = 0,1+1=10
  • 0^0 = 0,0+0=0

a&b,得到的二进制数的每一位就是a+b需要进位的位,原因:

  • 0&1 = 0,0+1=1
  • 1&0 = 0,1+0=1
  • 1&1 = 1,1+1=10
  • 0&0 = 0,0+0=0

a<<1,将a的每一位都进位

那么思路来了:①先a^b得到没有进位的加法,②将需要进位的进位,③把前两个加起来;即:(a^b) + (a&b)<<1当然啦,这里不能用“+”,不过我们可以用递归

package com.vapy.offer;
/**
 *
 * @author vapy 2016年8月29日
 *
 */
public class Add {
    public static void main(String[] args) {
        System.out.println(add(23,-245));
    }

    public static int add(int num1, int num2) {
        if(0 == num2) {
            return num1;
        }
        //<<的优先级比&高,切记不能少括号
        return add(num1^num2, (num1&num2)<<1);
    }
}

结果:-222

本文代码可在github查看:点击此处

4
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1188876次
    • 积分:6087
    • 等级:
    • 排名:第4103名
    • 原创:54篇
    • 转载:1篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论