Что возвращает следующая функция?

int fn(unsigned int x)
{
int count = 0 ;
for(; x!=0; x&=(x-1))
count ++;
return count;
}

Я попробовал это в компиляторе, но не мог понять, что происходит. Я думаю, что это связано с количеством битов в x, но что?

2

Решение

Я объясняю, что вы сделали 🙂

Согласно вашему коду, произойдет следующее, если x = 5

1) В первой итерации цикла

  a) condition check : .... 0101(X) ! = 0 ,
b) body : count will be 1 ;
c) increment part : .... 0101 &= .... 0100 => .... 0100

2) Во второй итерации

a) condition check : .... 0100(X) ! = 0 ,
b) body : count will be 2 ;
c) increment part : .... 0100 &= .... 0011 => .... 0000

Количество равно 2, которое является количеством битов, установленных в X (5)

0

Другие решения

Это хитрость. 🙂

Вы возвращаете количество битов, установленных в 1,

9

По вопросам рекламы [email protected]