一种判断数值是否为2的整数幂的方法

在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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。