2012-03-22 15 views
0

をコピーするために、私は以下のif文を避けたい場合。私はどういうわけかビット単位の演算子だけを使って古いビット配列から新しいビット配列にセットビットをコピーできますか?ビット操作の代わりに、ビットマップ

これに
#define BYTE_POS(pos) (pos/CHAR_BIT) 
#define BIT_POS(pos) (1 << (CHAR_BIT - 1 - (pos % CHAR_BIT))) 

if ((old_array[BYTE_POS(old_pos)] & BIT_POS(old_pos)) != 0) { 
    new_array[BYTE_POS(new_pos)] |= BIT_POS(new_pos); 
} 

答えて

1

変更BIT_POS:

#define BIT_POS(pos, state) (state << (CHAR_BIT - 1 - (pos % CHAR_BIT))) 

、その後にコードを変更します。

bool state = (old_array[BYTE_POS(old_pos)] & BIT_POS(old_pos, 1)) != 0); 

new_array[BYTE_POS(new_pos)] |= BIT_POS(new_pos, state);