力扣中不用加号的加法:面试题17.01
问题:设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。
代码实现:
class Solution {
public int add(int a, int b) {
while((a&b)!=0){//这两数的字节码相加是否会产生进位
int temp=a;
a=(a&b)<<1;//对会产生进位的位置进行进位
b=(b^temp);//当a+b不进位时,运算
}
return a^b;//将最终不在会产生进位的两数相加
}
}
解释:两数相加时,其二进制中相对应的每一位值的运算有以下几种可能:
a | 0 | 0 | 1 | 1 |
---|---|---|---|---|
b | 0 | 1 | 0 | 1 |
+ | 0 | 1 | 1 | 10 |
如图可知:当两数的相同位不全为1时,可使用^进行计算;当两数的相同位都是1时,将产生进位。
计算步骤:
- 循环判断 a&b是否等于零(判断是否会产生进位)
- 由于a在接下来的运算中将被改变,故使用临时变量temp存储a的值
- a=( a&b)<<1;(将两数相加会产生进位的数进行进位并赋予a)
- b=b^temp;(两数进行不进位的加法运算并将值赋给b)
- 重复步骤(1-4)
- 直至a,b进行加法运算时不再产生进位,退出循环
- 此时的a,b进行加法运算时,不会产生进位,res=a^b;
标签:运算,temp,int,相加,不用,加号,加法,进位 来源: https://www.cnblogs.com/ekig/p/14757071.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。