不用算术运算符实现两个数的加法

原创 2015年11月21日 11:22:42

1. 问题描述

不用算术运算符实现两个数的加法。

2. 解答

对于二进制加法运算,若不考虑进位,则1+1=0, 1+0=1, 0+1=1, 0+0=0,通过对比异或,不难发现,此方法与异或类似。因而排除进位,加法可以用异或来实现。
然后考虑进位,0+0的进位是0,1+0的进位为0,只有1+1时进位才为1,该操作与位运算的&操作相似。

那么加法运算可以这样实现:
1)先不考虑进位,按位计算各位累加(用异或实现),得值a;
2)然后计算进位,并将进位的值左移,得值b,若b为0,则a就是加法运算的结果,若b不为0,则a+b即得结果(递归调用该函数)。

3. 参考代码

int add(int a, int b)
{
    if (b == 0) return a; 
    int sum = a ^ b; 
    int carry = (a & b) << 1; 
    return add(sum, carry); 
}

相关文章推荐

不用算术运算符实现两个数的加法(按位异或)

http://www.cnblogs.com/houjun/p/4908725.html 对于二进制的加法运算,若不考虑进位,则1+1=0,1+0=1,0+1=1,0+0=0,通过对比异或,...

不用算术运算符实现两个数的加法(按位异或)

不用算术运算符实现两个数的加法(按位异或)   对于二进制的加法运算,若不考虑进位,则1+1=0,1+0=1,0+1=1,0+0=0,通过对比异或,不难发现,此方法与异或运算类似。因而排出进...

不用算术运算符实现两个数的加法(按位异或)

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

不用任何算术运算符计算两个数的和

问题定义:     写一个函数 int Add( int x, int y),计算两个整数的和,这个函数不能使用任何算术运算符(+, ++, --, -……等。) 分析:     考虑只有一位的...
  • lalor
  • lalor
  • 2012年03月18日 14:31
  • 1700

程序员面试100题之三:不用+、-、×、÷数字运算符做加法

题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。         分析:这又是一道考察发散思维的很有意思的题目。当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就...

【刷题算法】不用+运算符求加法

题目来自于lintcode 第1题 A+B问题: 题目如下: 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。 一般数值进行加法,比如两个数,A=9,B=7。 当进行十...

程序员面试题精选100题(55)-不用+、-、×、÷数字运算符做加法

题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。分析:这又是一道考察发散思维的很有意思的题目。当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决这个问题的关键...

PhotoShop算法实现--算术加法和减法(十二)

PhotoShop算法实现--算术加法和减法(十二) kezunhai@gmail.com http://blog.csdn.net/kezunhai          基本代数加...

不用"+","-","*","/","%"运算符球一个数的1/3

第一种方法:使用位操作符并实现“+”操作 // 替换加法运算符 int add(int x, int y) { int a, b; do { a = x & y; ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不用算术运算符实现两个数的加法
举报原因:
原因补充:

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