位运算实现加法

原创 2016年08月29日 18:08:02

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查看:点击此处

版权声明:开源共享,欢迎转载

LeetCode 371.Sum of Two Integers 位运算实现加法(减法)

1.原题Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.(...

位运算 实现加法

用位运算实现加法也就是计算机用二进制进行运算,32位的CPU只能表示32位内的数,这里先用1位数的加法来进行,在不考虑进位的基础上,如下 1 + 1 = 01 + 0 = 10 + 1 = ...

位运算实现加法

用位运算实现加法也就是计算机用二进制进行运算,32位的CPU只能表示32位内的数,这里先用1位数的加法来进行,在不考虑进位的基础上,如下 1 + 1 = 01 + 0 = 10 + 1 = 10 + ...

[ctest]位运算实现加法(转)

[ctest]位运算实现加法(转) 源地址:http://www.jb51.net/article/32130.htm 用位运算实现加法也就是计算机用二进制进行运算,32位的CPU只能表示...

用位运算实现加法和减法

用位运算实现加法和减法 位运算异或可以实现没有进位的加法,比如3+4.他们的二进制分别为 00000000 00000000 00000000 00000011 00000000 00...

利用位运算实现两个整数的加法运算,请代码实现,并作简要说明。

链接:https://www.nowcoder.com/questionTerminal/f0925bdc2bb9430f8c6323f635e3f1b4 来源:牛客网 /* *  x ^ ...
  • yzfydit
  • yzfydit
  • 2017年07月22日 15:37
  • 96

位运算模拟二进制加法--位图方法

题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 解析:我通过位数组来实现打印所有组合,这类似于用字符串模拟加法操作一样。...

usaco 1.5 checker 位运算实现

  • 2012年12月27日 22:24
  • 1018B
  • 下载

多项式乘法与加法运算(链表实现)

#include using namespace std; typedef struct PolyNode *Polynomial; struct PolyNode { int coef; ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:位运算实现加法
举报原因:
原因补充:

(最多只允许输入30个字)