若是一个整数是2的整数次幂,那么当它转化成二进制时,只有最高位是1,其余位都是0。git
2的整数次幂一旦减1,它的二进制数字就所有变成了1github
,这时候若是用原数值(2的整数次幂)和它减1的结果进行按位与运算,也就是n &(n1)ui
0和1按位与运算的结果是0,因此凡是2的整数次幂和它自己减1的结果进行与运算,结果都一定是0。反之,若是一个整数不是2的整数次幂,结果必定不是0.cdn
那么很简单,对于一个整数n,只须要计算n&(n1)的结果是否是0。这个方法的时间复杂度只有O(1)blog