我在32位和64位整数上执行按位函数,并且在编写将索引setValueAt(index, newState)
的位设置为index
的方法(1
)时卡住了newState
为true
,如果0
为newState
,则为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
答案 0 :(得分:3)
void setValueAt(int &value, int pos, bool newState) {
value = newState ? (1 << pos) | value : ~(1 << pos) & value;
}