我需要知道如何非常快速地执行非常具体的按位功能

时间:2011-12-14 07:44:19

标签: bit-manipulation

我在32位和64位整数上执行按位函数,并且在编写将索引setValueAt(index, newState)的位设置为index的方法(1)时卡住了newStatetrue,如果0newState,则为false我可以使用什么按位功能以与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

1 个答案:

答案 0 :(得分:3)

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