Что делает битовый оператор AND и делает? - PullRequest
3 голосов
/ 04 марта 2011

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

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

Ответы [ 4 ]

5 голосов
/ 04 марта 2011

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

a&=a-1;

тогда это побитовое и операция a и a-1 копируется в последующее.

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

a = a & (a-1);
3 голосов
/ 04 марта 2011

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

Начиная с

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

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

2 голосов
/ 04 марта 2011

& это бит и оператор .

Операция

a&=a-1;

, что совпадает с:

a = a & a-1;

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

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

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

0 голосов
/ 04 марта 2011

у вас количество неинициализированных

должно быть

static int count=0;

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

...