关闭

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

210人阅读 评论(0) 收藏 举报
分类:

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); 
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12064次
    • 积分:329
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论