位运算实现加法

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

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

位运算实现加法

思路: 考虑一个普通的加法计算:5+17=22 在十进制加法中可以分为如下3步进行:     1. 忽略进位,只做对应各位数字相加,得到12(个位上5+7=12,忽略进位,结果2);     2. ...
  • u010274071
  • u010274071
  • 2013年11月09日 00:05
  • 1129

利用位运算实现两个整数的加法运算

运用位运算实现两数之和
  • beyondsunqixin
  • beyondsunqixin
  • 2016年08月07日 13:29
  • 525

Java用位运算实现加法和减法

Java用位运算实现加法和减法 参考链接: 位运算 实现加法 public static int add(int a, int b) { // + int s = a ^ b; /...
  • zhidao8
  • zhidao8
  • 2017年01月06日 13:57
  • 571

C++学习笔记-----用位运算实现加减乘除

数据在计算机内存中是以二进制存储的。 几种常用的位运算: 与运算&: 对应位均为1时为1,其它为0。 或运算|: 对应位均为0时为0,其它为1。 异或运算^: 对应位不相...
  • sinat_35261315
  • sinat_35261315
  • 2017年06月07日 23:11
  • 1614

位运算-加法运算、交换两个数值

前面的引言部分是写在前面的胡说八道,了解题目的话可以直接跳过此部分查看正文。引言这个问题的来源是http://www.lintcode.com/上的编号第一的面试题目,涉及到二进制位运算,很有意思。并...
  • surp2011
  • surp2011
  • 2016年04月14日 10:52
  • 1531

面试算法题:不用+、-、×、÷数字运算符做加法 (位运算实现加法操作)

题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。 首先我们可以分析人们是如何做十进制的加法的,比如是如何得出7+25=32这个结果的。实际上,我们可以分成三步的:   ...
  • shihui512
  • shihui512
  • 2013年07月29日 17:19
  • 3653

位运算实现加减法

首先实现加运算,实现加运算自然就可以实现减运算了。位运算是对二进制进行的操作,两个二进制数相加,如果同位都是1,则产生进位。如果同位都不是1,则不产生进位。 1).不考虑进位的情况,两个二进制数相加就...
  • susershine
  • susershine
  • 2013年11月23日 16:35
  • 935

位运算实现整数的加减乘数运算

用位运算实现加法也就是计算机用二进制进行运算,32位的CPU只能表示32位内的数,这里先用1位数的加法来进行,在不考虑进位的基础上,如下 1 + 1 = 01 + 0 = 10 + 1 = ...
  • qq_1017097573
  • qq_1017097573
  • 2017年08月16日 18:05
  • 237

[leetcode] Sum of Two Integers--用位运算实现加法运算

问题:Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.Ex...
  • Pwiling
  • Pwiling
  • 2016年07月06日 21:13
  • 5987

java位运算实现加减取模

java位运算实现加减乘除取模
  • datou0529
  • datou0529
  • 2016年07月28日 23:50
  • 1003
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:位运算实现加法
举报原因:
原因补充:

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