我发现一些代码使用XOR和AND添加两个数字而不使用任何算术运算符。Java非算术加法器
我知道x^y等于总和,并且x等于进位。但我不明白为什么运动必须左移?我对左边的按位移的了解与乘以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尝试并在一张纸上绘制。你会更清楚地看到它。基本上,如果有两个值都设置了位,它们将导致“冒泡”一位。通过执行XOR并移动进位,您只需按位添加即可。 – px1mp 2014-09-26 14:13:15
在十进制数中,如果你加了66 + 55,那么你将有一列进位到十列的进位;同样,当你添加十列。 – duffymo 2014-09-26 14:14:09