Я хочу извлечь биты десятичного числа.
Например, 7 - это двоичный 0111, и я хочу получить 0 1 1 1 все биты, хранящиеся в bool. Как я могу это сделать?
Хорошо, цикл - не лучший вариант, могу я сделать что-нибудь еще для этого?
c
bit-manipulation
Бадр
источник
источник
(n >> k) & 1
одинаково действителен и не требует вычисления маски, поскольку маска постоянна из-за сдвига перед маскированием, а не наоборот.struct
может быть полезным, поскольку вы получаете все необходимые данные за одну операцию.По просьбе, я решил расширить свой комментарий к ответу указательного пальца до полноценного ответа. Хотя его ответ правильный, он излишне сложен. Кроме того, все текущие ответы используют подписанные
int
s для представления значений. Это опасно, поскольку сдвиг вправо отрицательных значений определяется реализацией (т.е. не переносится), а сдвиг влево может привести к неопределенному поведению (см. Этот вопрос ).Путем сдвига желаемого бита вправо в позицию младшего разряда можно выполнить маскирование с помощью
1
. Нет необходимости вычислять новое значение маски для каждого бита.Как законченная программа, вычисляющая (и впоследствии распечатывающая) массив однобитовых значений:
Предполагая, что вы хотите вычислить все биты, как в этом случае, а не конкретный, цикл можно изменить на
Это модифицируется
input
на месте и, таким образом, позволяет использовать однобитовый сдвиг постоянной ширины, который может быть более эффективным на некоторых архитектурах.источник
Вот один способ сделать это - есть много других:
Трудно понять, почему использование цикла нежелательно, но развернуть цикл достаточно просто:
Или вычисление константных выражений в последних четырех операторах:
источник
Вот очень простой способ сделать это;
источник
@prateek спасибо за вашу помощь. Я переписал функцию с комментариями для использования в программе. Увеличьте 8 для большего количества бит (до 32 для целого числа).
источник
Если вам не нужны циклы, вам придется их записать:
Как показано здесь, это также работает в инициализаторе.
источник
источник
С помощью
std::bitset
источник