【发布时间】:2014-10-10 03:56:52
【问题描述】:
我找到了一些代码,可以使用 XOR 和 AND 将两个数字相加,而无需使用任何算术运算符。
我知道 x^y 等于总和,而 x&y 等于进位。但是我不明白为什么进位必须左移?我对左移的知识与乘以 2 相同。为什么进位要乘以 2?
public static int add(int x, int y) {
// Iterate till there is no carry
while (y != 0)
{
// carry
int carry = x & y;
// Sum
x = x ^ y;
y = carry << 1;
}
return x;
}
任何指导表示赞赏。
【问题讨论】:
-
尝试使用 1 和 3 并将其绘制在一张纸上。你会看得更清楚。基本上,如果为这两个值设置了任何位,它们将导致“冒泡”一位。通过进行异或并向上移动进位,您只需实现按位加法。
-
在十进制加法中,如果你加上 66 + 55,你会有一个进位从个列移到十列;同样,当您添加十列时。