不使用加法运算符实现加法--LintCode领扣编程题

    public static int add(int a, int b) {
		int sum = a^b;
		int carry = (a & b) << 1;
		if(carry == 0) {
			return sum;
		}
		return add(sum,carry);
	}

原理:主要使用按位运算符中的异或运算符^和与运算符&

  • ^:相同为0,相异为1;
  • &:同是1 才为1,其他都为0,和逻辑与类似,可以把1看作true;

二进制的加法运算,和异或操作非常相似,以4位为例

加法 异或
0110 0110
0101 0101
1011 0011

从上可以看到,加法操作和异或的区别就在于进位,加法会进位,而异或没有,那么异或加上进位数不就可以了
怎么求进位数?
当都为1时,会发生进位,可使用&进行识别,再通过左移<<得到进位数,和异或结果求和即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章