1

std ::bitset<16>の4ビットを互いにANDします。つまり:

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

これらの4ビット配列をANDします。

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

考えられる解決策の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 に答える