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

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); 
}
阅读更多
个人分类: 经典算法
上一篇【数据结构】线性表的链式存储结构--单链表
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭