Итак, у меня есть следующий код для умножения двух переменных 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;
}
Я действительно пытался понять код, но так и не смог разобраться в алгоритме.