ビットが「インターレース」された16ビット値があります。
次の順序でビットを格納する 8 つの項目 (値 0 から 3) の配列を取得したいと考えています。
- アイテム 0: ビット 7 と 15
- 項目 1: ビット 6 および 14
- 項目 2: ビット 5 および 13
- ...
- 項目 7: ビット 0 と 8
これは簡単な解決策です:
function uninterlace(n) {
return [((n>>7)&1)|((n>>14)&2), // bits 7 and 15
((n>>6)&1)|((n>>13)&2), // bits 6 and 14
((n>>5)&1)|((n>>12)&2), // bits 5 and 13
((n>>4)&1)|((n>>11)&2), // bits 4 and 12
((n>>3)&1)|((n>>10)&2), // bits 3 and 11
((n>>2)&1)|((n>> 9)&2), // bits 2 and 10
((n>>1)&1)|((n>> 8)&2), // bits 1 and 9
((n>>0)&1)|((n>> 7)&2)];// bits 0 and 8
}
これを行うためのより良い(より速い)方法を知っている人はいますか?
編集:
ノート:
- 事前計算されたテーブルを作成することはオプションではありません。
- アセンブラーまたは CPU 固有の最適化を使用できない