--
分类: C/C++
2013-12-25 20:19:30
转载: http://blog.csdn.net/ojshilu/article/details/17167083
一般来讲,位运算的速度比加减乘除运算符、分支语句等的速度要快,并且能够达到并行计算。学几个位运算的技巧,在不滥用的前提下对于优化程序速度是好处的。
乘以或除以2的幂数
可以用左移<<和右移>>位运算来代替
i << 2, i >> 2
判断一个数的奇偶性
可以用判断二进制最右的一位来代替,最右位是1则是偶数,是0则是奇数。
i & 1
判断一个数是否是2的幂数
x & (x – 1)
将一个数对应的二进制位的最右边的1置为0
x & (x – 1)
将一个数对应的二进制位的最右边的0置为1
x | (x + 1)
将一个数对应的二进制位的最右边的0置为1,其余位全置为0
?x & (x + 1)
将一个数对应的二进制位的最右边的1置为0,其余位全置为1
?x | (x – 1)
将一个数对应的二进制位的右尾端连续的1都置为0
x & (x + 1)
将一个数对应的二进制位的右尾端连续的1都置为0,其余位全置为1
?x | (x + 1)
将一个数对应的二进制位的右尾端连续的0都置为1
x | (x– 1)
将一个数对应的二进制位的右尾端连续的0都置为1,其余位全置为0
? x & (x - 1)
将一个数对应的二进制位仅保留最右边的1,其余为全置为0
x & (?x)