我想将 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 个 4 位的 std::bitset<16> 相互与。我是说:
std::bitset<16> arr("1100 1100 1100 1100");
我想 AND 这些 4 位数组。
std::bitset<4> a;
a= 1100 & 1100 & 1100 & 1100
我想以最有效的方式做到这一点。不使用 for 循环。
提前致谢。
切片位集没有捷径。只需按照自己的方式进行操作
a[0] = arr[0] & arr[4] & arr[8] & arr[12];
等等
计算机检查 16 位不会花费很长时间,但是您可以这样做!
只要您知道目标和源有多少位,您就可以做到这一点。
std::bitset<16> arr("1100110011001100");
std::bitset<4> v (
((arr ) &
(arr>>4 ) &
(arr>>8 ) &
(arr>>12)).to_ulong()
& 0x0f
);
一种可能的解决方案是:
unsigned long i = arr.to_ulong();
i = (i & (i >> 4) & (i >> 8) & (i >> 12)) & 0xf;
a = std::bitset<4>(i);