在golang slice扩容方法中有一种判断一个整数数值是否为2的整数次幂的方法。通过位运算的方式,具有极高的效率。具体如下:
func isPowerOfTwo(x uintptr) bool {
return x&(x-1) == 0
}
通过分析我们发现一个满足2n的整数的二进制都有首位为1,其余位都为0的特点。而2n-1的二进制都满足低位全部为1。x&(x-1)刚好满足==0的特点。例如:
x x-1
1 1 0 0
2 10 1 01
4 100 3 011
8 1000 7 0111
16 10000 15 01111