Этот вопрос непосредственно следует после прочтения алгоритма подсчета битов (Брайан Керниган) в целочисленной временной сложности. Код Java, о котором идет речь,
int count_set_bits(int n) {
int count = 0;
while(n != 0) {
n &= (n-1);
count++;
}
}
Я хочу понять, что здесь делает n &= (n-1)
? Я видел аналогичную конструкцию в другом отличном алгоритме для определения того, является ли число силой 2, например:
if(n & (n-1) == 0) {
System.out.println("The number is a power of 2");
}