Я хочу, чтобы И 4 4-бит из std :: bitset<16> друг с другом. Я имею в виду:
std::bitset<16> arr("1100 1100 1100 1100");
Я хочу и эти 4-битный массив.
std::bitset<4> a;
а = 1100 & 1100 & 1100 & 1100
Я хочу сделать это наиболее эффективным способом. Не использовать для петель.
Заранее спасибо.
пока вы знаете, сколько битов является целью и источником, вы можете сделать это.
std::bitset<16> arr("1100110011001100");
std::bitset<4> v (
((arr ) &
(arr>>4 ) &
(arr>>8 ) &
(arr>>12)).to_ulong()
& 0x0f
);
Существует не ярлык с нарезкой наборов битов. Просто проложите себе путь сквозь биты
a[0] = arr[0] & arr[4] & arr[8] & arr[12];
и т.п.
Компьютер не может долго проверять 16 бит, как бы вы ни делали!
Одним из возможных решений является:
unsigned long i = arr.to_ulong();
i = (i & (i >> 4) & (i >> 8) & (i >> 12)) & 0xf;
a = std::bitset<4>(i);