Как определить, что делает этот битовый код - PullRequest
0 голосов
/ 10 января 2020

Я инструктор с очень небольшими знаниями в программировании, но мне нужна помощь с некоторыми общими вопросами программирования из теста, который я не могу понять. Вопрос гласит: см. Строку 004; выражение "value & 1" делает что из следующего?

    001 unsigned int bitCount (int value) {
    002 unsigned int count = 0;
    003    while (value > 0) {        //until all bits are zero
    004       if ((value & 1) ==1) {  //check lower bit
    005             count++;
    006       }
    007       value >>1;
    008    }
    009    return count;
    010 }
  • маскирует все биты, кроме lsb
  • маскирует msb исключительно
  • маскирует все биты кроме MSB
  • маскирует исключительно MSB

1 Ответ

0 голосов
/ 10 января 2020

В C оператор & выполняет побитовую операцию И. Другими словами, он проходит побитно через два числа и устанавливает соответствующий бит ответа равным 1, только если ОБА входных битов равны 1.

В двоичном формате число 1 равно 000 .... 00001, другими словами, он имеет только одну единицу в младшей битовой позиции. Итак, когда вы & (И) с ним, все в ответе будет нулевым, за исключением, возможно, той самой младшей битовой позиции, которая будет равна 1, только если другой вход имеет 1 в этой позиции.

Кроме того, в вашей программе строка 007, вероятно, не делает то, что вы хотите. Похоже, вы сдвигаете value на один бит вправо, но тогда вы не сохраняете результат сдвига. Возможно, вы хотите написать что-то вроде value = value >> 1, чтобы оно действительно изменило переменную value?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...