讲解清晰 c++代码

不用加减乘除做加法

http://www.nowcoder.com/questionTerminal/59ac416b4b944300b617d4f7f111b215

48、不用加减乘除做加法

本质是在考位运算,因为除去那些也就只有位运算了

1)二进制的世界里先都考虑成二进制,比如5->101

7->111

(2)在正常的运算中是相加,然后进位,但是使用异或的时候都是不进位的加法(概念得知)

使用&则是获得进位的加法,因为由概念知,1&1时是1,1&0  0&1 0&0都是0,就可以用&来模拟那个进位。此时再左移,就相当于已经是进位完的“进位部分”了。

3)实战,101^111=010 (十进制2)

101&111=101---> 1010 (十进制9)

010+1010两部分再相加,因为还是有可能会进位,所以这个“相加”还是^& 来实现。前面那个0不影响结果的~

010^1010=1000

010&1010=010 ----> 0100,发现还是要进位对不对,那么继续加

1000^0100=1100

1000&0100=0000

没有进位了,那之前加的就已经是正确答案了,23次方加22次方是12

需要注意的就是经过上述推理需要是&>>1 不要忘记

C++代码:

class Solution {
    public:
        int Add(int num1,int num2) {
        int t1=-1,t2=-1;
        while(t2!=0){
            t1=num1^num2;//不进位
            t2=(num1&num2)<<1;//进位
            num1=t1;num2=t2;
        }
        return t1;
    }
};

代码要注意

(num1&num2)要加括号!!!因为有【优先极问题】

②上述代码t2=0为出界点,所以t2不能为0,初始化成别的

③左移1位,左边的符号<  一位是<<1 虽然意思的确是*2 但写还是得写<<1

全部评论

相关推荐

1.&nbsp;事件概述3月10日下午,华为在“心声社区”发布长达6500字通报,曝光72名正式员工及19名非雇员在非雇员招聘中存在徇私舞弊行为,多人出卖公司信息资产获利,引发热议。-&nbsp;“非雇员”一般指华为OD员工,与人力服务公司签劳动合同,以派遣方式到华为工作,薪资待遇与华为内部员工基本一致,可通过考核转正。2.&nbsp;相关传言与真相华为相关人士称暂无官方回应,很多传言细节不准确。&nbsp;华为成都研究所员工透露,此次通报主要涉及成都研究所的数据存储部门,整个数据存储业务约100余人,此次明文通报除名辞退或通报批评的有62名,“很多部门基本全开除”&nbsp;。网传任正非亲赴成都、封楼抓人等消息不实。早在2024年年中,就有...
七安有出处嘛:省流:任正非亲赴成都等消息不实,2024 年年中就有人举报了;涉及36名违规当事人,其中有13人被除名;10人有主动申报情节或情节较严重的,予以辞退处理;另有13人被劝退、个人职级降3等。另外还有26名相关管理责任人作为直接或间接管理者,被处以个人职级降6等,冻结个人涨薪、职级晋升、干部向上任命,冻结期6—12个月不等;若下属违规偶发,则仅通报批评。并没有释放100HC😂😂😂
点赞 评论 收藏
分享
02-24 17:39
门头沟学院 Java
神哥不得了:神哥来啦~专业技能的话建议不要前面空那么多,八股的话建议先把高频top 50的八股多巩固几遍,千万不要看那些假高频八股。项目的话,建议换两个高质量的项目上去
点赞 评论 收藏
分享
03-03 19:08
已编辑
电子科技大学 C++
虚闻松声:简历还是不错。 说两点 1. 正确书写专有名词。如MySQL、Python等。 2. 清晰展示项目内容。最好以列表形式分大的模块展示。 建议就是,1. 刷完 hot100 2. 适当结合AI CV、求职等咨询,欢迎私信交流。
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务