【问题标题】:I need to know how to do a very specific bitwise function very quickly我需要知道如何快速完成一个非常具体的按位函数
【发布时间】:2012-01-20 00:30:21
【问题描述】:

我正在对 32 位和 64 位整数执行按位函数,并且在编写将索引 index 处的位设置为 1(如果 newState 是 @987654325 @ 或 0 如果 newStatefalse我可以使用什么按位函数以与 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

【问题讨论】:

    标签: bit-manipulation


    【解决方案1】:
    void setValueAt(int &value, int pos, bool newState) {
        value = newState ? (1 << pos) | value : ~(1 << pos) & value;
    }
    

    【讨论】:

    • 如果 value &amp; 1 如果 O(1n),这是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多