#c #bit-manipulation
#c #битовая манипуляция
Вопрос:
Итак, я пытаюсь выполнить целочисленное деление для двоичного представления беззнакового короткого. Например: Допустим, что беззнаковое короткое x = 5, представление двоичного числа равно
1111. 7 будет равно 111. Я хочу иметь возможность находить количество пар битового представления 1. Моя идея состояла в том, чтобы подсчитать количество единиц, используя битовую манипуляцию следующим образом.
unsigned short divide(unsigned short input) {
unsigned short count = 0;
while (input != 0){
if ((input amp; 1) == 1)
count = count 1;
input = input >> 1;
}
return count;
}
Приведенный выше код работает для получения общего числа в 1 бит в двоичном представлении. Пример: в моей версии 7 оно возвращало бы 3, поскольку в двоичном представлении 3 1. Теперь я просто хочу иметь возможность выполнять целочисленное деление, такое как 3/2 = 1, чтобы найти количество пар 1. 3/2 для беззнакового сокращения будет равно 1, поскольку существует только 1 пара битов 1. если для 5, это было бы 4/2 = 2,2 пары. Как бы я поступил с точки зрения реализации целочисленного деления без использования арифметических операций, таких как модуль, ,-, *, /.
Комментарии:
1. Я думаю, вы имели в виду
x=15
вместоx=5
для первого примера.2. Деление на степень 2 аналогично сдвигу вправо, когда делимое является целым числом без знака.
3. x/pow(2,y) равно x>>y
4.
only 1 pair of 1's bits
— насколько я понимаю, ваш алгоритм завершится неудачей для10101
. — не имеет пар битов 1, вы будете считать 1 пару (3/2 = 1).