Optimization 位运算符

Optimization 位运算符,optimization,bit-manipulation,Optimization,Bit Manipulation,取下面类型2、2^2(=4)、2^3(=8)、16、32、64的任意数字 如果我们将两个数字的O型圈(|)设为 2| 4 = xyz 0010 | 0100 = 0110 然后,为了检查这个数字xyz是否包含任何给定的数字,我们将xyz与这个数字相加,如果我们再次得到那个数字,我们可以说它包含那个数字 0110 & 0010 = 0010 我们可以使用这个属性来优化代码吗? 或者在任何其他实际的解决方案中 是的,这种技巧在枚举标志中使用 例如: enum Blah { Bol

取下面类型2、2^2(=4)、2^3(=8)、16、32、64的任意数字

如果我们将两个数字的O型圈(|)设为

2| 4 = xyz 
0010 | 0100 = 0110 
然后,为了检查这个数字xyz是否包含任何给定的数字,我们将xyz与这个数字相加,如果我们再次得到那个数字,我们可以说它包含那个数字

0110 & 0010 = 0010 
我们可以使用这个属性来优化代码吗?
或者在任何其他实际的解决方案中

是的,这种技巧在枚举标志中使用

例如:

enum Blah {

Bold = 1,
Italic = 2,
Huge = 4,
Underline = 8
}
如果使用二次幂枚举,则可以执行以下操作:

int mystringFlags = Bold | Italic;

它在许多地方经常使用。

这不是一回事,但另一个使用位运算符的“实用解决方案”是使用它们来避免分支

例如:

if(input < B)
    output = Up;
else if(input > A)
    output = Down;
if(输入A)
输出=下降;
可以替换为具有以下内容的逐位操作:

output = ~(!(input < B) * -1) & Up | ~(!(input > A) * -1) & Down;
output=~(!(输入A)*-1)&Down;

在我的例子中,我每天运行这样的行数百万次,因此它们运行时间的小幅度减少带来的好处超过了编写更复杂的代码所需的时间,而不是简单的if/else if来避免分支。

你在说什么样的优化?您只是想问一下位运算符是否有实际用途?我们在自己的框架中使用了它来添加和检查已经存在的事件。这是在现实编程中使用此功能的一个场景。这将比进行比较快得多。那么,你能建议我使用这个功能的其他情况吗?你可以在任何有钉子的地方使用这个锤子。这不是一个建设性的问题。是什么让您认为使用
&
测试位比任何其他比较都快?对于与任何其他数据类型(bool除外)相关的比较,您需要与该数据类型进行比较,显然它比按位运算符的成本更高。这不适用于optimization@not-是的,我把它改成了“把戏”已经开始了,我也很生气