Что делает побитовый оператор И?

Помогите решить эту проблему и объясните логику. Я не знаю, как работает оператор &.

void main() { int a = -1; static int count; while (a) { count++; a &= a - 1; } printf("%d", count); } 

Если вы имеете в виду

 a&=a-1; 

то он поразряден и операция a и a-1 копируется в потом.

Редактировать: Как скопировали от Тадеуша А. Кадлубовского в комментарии:

 a = a & (a-1); 

Выражение a&=a-1; очищает наименее значащий бит (самый правый 1) от. Код подсчитывает количество бит в (в данном случае -1).

Начиная с

 a = -1 ; // 11111111 11111111 11111111 11111111 32bits signed integer 

Код выводит 32 в 32-битной целочисленной конфигурации.

& является побитовым и оператором .

Операция

 a&=a-1; 

который аналогичен:

 a = a & a-1; 

очищает младший значащий бит a .

Таким образом, ваша программа эффективно вычисляет количество бит, установленных в a .

И поскольку count объявлен как static он автоматически инициализируется до 0 .

вы считаете неинициализированным

должно быть

 static int count=0; 

оператор & называется И http://en.wikipedia.org/wiki/Bitwise_operation#AND