给定两个32位的整数a和b,可正,可负,可以为0,不能使用算数运算符,实现a和b的加法操作
2:规定
1:不能有“+”,“-”,“*”,“/”四个运算符
2:如果给定的值相加导致了数据的溢出,你可以不考虑这些
3:思考
1:先举个十进制相加的例子:14+19
a)先加个位的数,加出来是13,那就个位写3,保留十位的1
b)十位相加,1+1得到是2 ,再加上个位保留的进位数1,十位就等于2+1=3;
c)得到结果33
上面是十进制相加的做法,那么如果把它们转换成二进制,怎么做呢?
a)把14 改成二进制1110,19改成二进制10011
b) 将两个二进制数相加,等同于十进制数相加,只不过十进制是遇10进1,二进制是遇2进1.
c)得到的结果是100001,转换成十进制后也是等于33
通过上面的分析,我们可以通过从低位到高位“求和”和“进位”的方式。下面看下14+19的例子
num1 01110
num2 10011
-----------------------------------------
上面2值^的结果 11101
上面2值&<<1的结果 00100
-----------------------------------------
上面2值^的结果 11001
上面2值&<<1的结果 01000
-----------------------------------------
上面2值^的结果 10001
上面2值&<<1的结果 10000
-----------------------------------------
上面2值^的结果 00001
上面2值&<<1的结果 100000
-----------------------------------------
上面2值^的结果 100001
上面2值&<<1的结果 000000
-----------------------------------------
最后&<<1的结果为0,则过程终止,返回100001,转换成十进制就是33.
延伸:如果想实现a和b的“减乘除”操作,你的思路又是什么呢?请关注下面的公众号,我们将在下节讲解哦。
注:
&:如果相对应位都是1,则结果为1,否则为0
|:如果相对应位都是0,则结果为0,否则为1
~:反运算符翻转操作数的每一位,即0变1,1变0
^:如果相对应位值相同,则结果为0,否则为1
如果你觉得这篇文章有用,记得分享给其他的小伙伴,大家一起进步哦~~~
扫一扫 关注我的公众号
如果你想要跟大家分享你的文章,欢迎留言投稿~
如果你喜欢,请留下你的赞哦