<分区>
所以我有以下代码使用左右移位将两个变量 x 和 y 相乘。
class Multiply {
public static long multiply(long x,long y) {
long sum = 0;
while(x != 0) {
if((x & 1) != 0) {
sum = sum+y;
}
x >>>= 1;
y <<= 1;
}
return sum;
}
public static void main(String args[]) {
long x = 7;
long y = 5;
long z = multiply(x,y);
}
}
但是我不明白它背后的逻辑,我明白当你这样做的时候
y<<=1
你在加倍 y,但是 while 循环的迭代次数取决于 x 的位数是什么意思?
while(x != 0)
另外,为什么我只在 x 的最右边位是 1 时才求和?
if((x & 1) != 0) {
sum = sum+y;
}
我真的很努力去理解代码,但我一直没能理解算法。