前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >不使用加减乘除计算两个数的和

不使用加减乘除计算两个数的和

作者头像
leehao
发布2025-02-11 11:08:58
发布2025-02-11 11:08:58
3600
代码可运行
举报
文章被收录于专栏:leehaoleehao
运行总次数:0
代码可运行

国际惯例,先上代码:

代码语言:javascript
代码运行次数:0
复制
public int Add(int num1,int num2){
    int tmp = num1;
    num1 = tmp^num2;
    num2 = tmp&num2;
    return num2 == 0?num1:Add(num1,num2 << 1);
}

分析: 1.两数字a、b相加,其实是二进制的相加 2.两个数字异或运算,结果为c, 3.两个数字与运算,若等于0,则表示没有进位,返回c即可 否则,存在进位,结果为d 4.将d左移1位,与c进行相加,重复1-4即可。

举例:3(011)和5(101)

代码语言:javascript
代码运行次数:0
复制
3^5=011^101=110
3&5=011^101=001
因为001不等于0,表示有进位,左移1位,为010
将110和010相加
110^010=100
110&010=010
因为010不等于0,表示有进位,左移1位,为100
将100和100相加
100^100=000
100&100=100
因为100不等于0,表示有进位,左移1位,为1000
将1000和000相加
1000^0000=1000
1000&0000=0000
0000等于0,没有进位,返回1000(8)即可

结论:3+5=8

注:减法类似

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档