码迷,mamicode.com
首页 > 其他好文 > 详细

加法的位运算实现

时间:2019-09-30 16:53:58      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:car   code   接下来   完成   style   arc   运算   str   程序   

Lintcode 1. A + B Problem

Solution:

 1     int aplusb(int num1, int num2) {
 2 
 3         if(num2==0) return num1;//没有进位的时候完成运算     
 4     
 5         int sum,carry;     
 6     
 7         sum=num1^num2;//完成第一步没有进位的加法运算     
 8     
 9         carry=(num1&num2)<<1;//完成第二步进位并且左移运算     
10     
11         return aplusb(sum,carry);//进行递归,相加  
12 
13     }

 

 

接下来来分析一下这个程序设计的思路:

对于加法 : a + b 

按照这个程序的思路可以把加法分为两个部分:

  第一个部分:不产生进位的时候的和

  第二个部分:一个可以用来表示这一次加法运算中所有进位的数

 

根据上面的描述:

  第一部分:a^b

  第二部分:(a&b)<<1 

 

注: 第二部分为什么要右移一位,例如一个两位二进制的数 01 & 01  , 是第一位(右边是低位)产生了进位,当时对第二位产生了影响,所以所得结果应为10

 

然后不断重复这两个部分,当没有无进位发生的时候,纯粹的 a^b 即为 a+b

 

参考连接:

 https://www.cnblogs.com/luowei010101/archive/2011/11/24/2261575.html

加法的位运算实现

标签:car   code   接下来   完成   style   arc   运算   str   程序   

原文地址:https://www.cnblogs.com/virgildevil/p/11612996.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!