所以我有以下代码使用左移和右移将两个变量 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;
}
我真的试图理解代码,但我一直无法理解算法。
慕容森
浮云间
相关分类