9

ビットマスクに使用される 32 ビット整数と、32 個の値を持つ配列があります。ビットマスク内のゼロ以外のビットの位置に対応するインデックスの値のみを配列から取得する方法は?

たとえば、ビットマスクが 49152 であるとします。これは、バイナリで 1100000000000000 です。したがって、配列からインデックス 14 と 15 の要素の値を取得する必要があります。

4

3 に答える 3

6

マスクを 32 ステップでループし、「1」をテストする必要があります。このビットが設定されている場合、要素を結果の配列にコピーできます。

擬似コード:

m = 0x00000001
j = 0
for i in 0 to 31 loop
  if ((mask & m) = m) then   // bit is set in mask
    result(j++) := input(i)
  end if
  m := m << 1     // shift left by 1 or multiply by 2
end loop
于 2014-12-17T22:11:54.030 に答える