分析
如果一个整数是2的整数次幂,那么当它转化成二进制时,只有最高位是1,其他位都是0。
2的整数次幂一旦减1,它的二进制数字就全部变成了1
,这时候如果用原数值(2的整数次幂)和它减1的结果进行按位与运算,也就是n &(n1)
0和1按位与运算的结果是0,所以凡是2的整数次幂和它本身减1的结果进行与运算,结果都必定是0。反之,如果一个整数不是2的整数次幂,结果一定不是0.
那么很简单,对于一个整数n,只需要计算n&(n1)的结果是不是0。这个方法的时间复杂度只有O(1)
如果一个整数是2的整数次幂,那么当它转化成二进制时,只有最高位是1,其他位都是0。
2的整数次幂一旦减1,它的二进制数字就全部变成了1
,这时候如果用原数值(2的整数次幂)和它减1的结果进行按位与运算,也就是n &(n1)
0和1按位与运算的结果是0,所以凡是2的整数次幂和它本身减1的结果进行与运算,结果都必定是0。反之,如果一个整数不是2的整数次幂,结果一定不是0.
那么很简单,对于一个整数n,只需要计算n&(n1)的结果是不是0。这个方法的时间复杂度只有O(1)