位操作符的位操作速度

时间:2011-05-08 23:03:16

标签: c++ bit-manipulation operator-keyword

假设我有

x &(num-1)

其中x是无符号长long,num是常规int和&是按位和运算符。

随着num值的增加,我的速度明显降低。这是正常的行为吗?

这些是受影响的代码的其他部分

int* hash = new int[num]

3 个答案:

答案 0 :(得分:2)

我不认为按位操作正在减慢,我认为你已经使用了很多次。而且可能它甚至不是按位操作花费太长时间,而是其他任何你也做了更多次。

使用分析器。

答案 1 :(得分:2)

如果你在紧密循环中执行代码,那么你可能会看到性能会减少更高的num得分,我猜测你的C ++编译器不能找到一个本地指令来执行&一个无符号的长整数 - 正如你所说的那样,每增加一个2的幂就会减速,那么我期望得到的代码来自&重复“将num”除以2,直到它为零并逐位执行。

另一种可能性是你正在运行的CPU很蹩脚,并且在固定的周期内没有执行AND。

答案 2 :(得分:0)

问题解决了。它与CPU缓存和位置有关。