1

我想将 4 个 4 位的 std::bitset<16> 相互与。我是说:

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

我想 AND 这些 4 位数组。

std::bitset<4> a;

a= 1100 & 1100 & 1100 & 1100

我想以最有效的方式做到这一点。不使用 for 循环。

提前致谢。

4

3 回答 3

2

切片位集没有捷径。只需按照自己的方式进行操作

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

等等

计算机检查 16 位不会花费很长时间,但是您可以这样做!

于 2012-09-28T12:52:52.783 回答
2

只要您知道目标和源有多少位,您就可以做到这一点。

std::bitset<16> arr("1100110011001100");
std::bitset<4> v (
    ((arr    ) & 
     (arr>>4 ) & 
     (arr>>8 ) & 
     (arr>>12)).to_ulong() 
     &   0x0f
);
于 2012-09-28T12:58:54.397 回答
1

一种可能的解决方案是:

unsigned long i = arr.to_ulong();
i = (i & (i >> 4) & (i >> 8) & (i >> 12)) & 0xf;
a = std::bitset<4>(i);
于 2012-09-28T13:04:25.897 回答