2011-12-14 6 views
0

32ビットと64ビット整数でビット単位の機能を実行していて、インデックスindexにビットを設定するメソッド(setValueAt(index, newState)) の場合newStatetrue、の場合はの場合は0となります。 AND、OR、XORなどと同じ速度で次の操作を行うためにどのようなビット機能を使用できますか?検出方法を使用することを躊躇し、ビットを変更する必要がある場合はXORを使用することを躊躇します。これには時間がかかりすぎる可能性があります。この方法は、ユーザの活動に応じて、迅速に、あるいは何百回も連続して呼び出さなければならない。私は非常に特定のビット単位の関数を非常に迅速に行う方法を知る必要があります

===setValueAt(3, false)=== 

    0101 0001 
    ? 0000 1000 
============== 
    0101 0001 



    0101 1001 
    ? 0000 1000 
============== 
    0101 0001 

それが助け場合は、次のように所望の効果の真理値表である:

|0|1 
-+-+- 
0|0|0 
-+-+- 
1|1|0 

答えて

3
void setValueAt(int &value, int pos, bool newState) { 
    value = newState ? (1 << pos) | value : ~(1 << pos) & value; 
} 
+0

O(1N)であれば '値&1 'が、これは何ですか? – Supuhstar

関連する問題