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

不用加号的加法

时间:2021-05-24 06:00:48      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:class   while   一个   其他   table   res   代码实现   return   产生   

力扣中不用加号的加法:面试题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时,将产生进位。

计算步骤:

  1. 循环判断 a&b是否等于零(判断是否会产生进位)
  2. 由于a在接下来的运算中将被改变,故使用临时变量temp存储a的值
  3. a=( a&b)<<1;(将两数相加会产生进位的数进行进位并赋予a)
  4. b=b^temp;(两数进行不进位的加法运算并将值赋给b)
  5. 重复步骤(1-4)
  6. 直至a,b进行加法运算时不再产生进位,退出循环
  7. 此时的a,b进行加法运算时,不会产生进位,res=a^b;

不用加号的加法

标签:class   while   一个   其他   table   res   代码实现   return   产生   

原文地址:https://www.cnblogs.com/ekig/p/14757071.html

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