bytearray — C ++ Выполнение операции над битами std :: bitset

Я хочу, чтобы И 4 4-бит из std :: bitset<16> друг с другом. Я имею в виду:

std::bitset<16> arr("1100 1100 1100 1100");

Я хочу и эти 4-битный массив.

std::bitset<4> a;

а = 1100 & 1100 & 1100 & 1100

Я хочу сделать это наиболее эффективным способом. Не использовать для петель.

Заранее спасибо.

1

Решение

пока вы знаете, сколько битов является целью и источником, вы можете сделать это.

std::bitset<16> arr("1100110011001100");
std::bitset<4> v (
((arr    ) &
(arr>>4 ) &
(arr>>8 ) &
(arr>>12)).to_ulong()
&   0x0f
);
2

Другие решения

Существует не ярлык с нарезкой наборов битов. Просто проложите себе путь сквозь биты

a[0] = arr[0] & arr[4] & arr[8] & arr[12];

и т.п.

Компьютер не может долго проверять 16 бит, как бы вы ни делали!

2

Одним из возможных решений является:

unsigned long i = arr.to_ulong();
i = (i & (i >> 4) & (i >> 8) & (i >> 12)) & 0xf;
a = std::bitset<4>(i);
1