前言
概念:
如果一个数是2的幂,那么它的二进制是这样的:
2 10
4 100
8 1000
16 10000
也就是第一个是1,其他都是0。
然后-1的话:
1 01
4 11
8 111
16 1111
正文
(num&(num-1))==0
就是了。
解释,为什么不是2的幂就不会等于0呢?
比如说3
3 111
2 010
那么是不会等于0的,因为其他位会补位,也就是一定有一个同为1的。
所以可以这样来运算。
概念:
如果一个数是2的幂,那么它的二进制是这样的:
2 10
4 100
8 1000
16 10000
也就是第一个是1,其他都是0。
然后-1的话:
1 01
4 11
8 111
16 1111
(num&(num-1))==0
就是了。
解释,为什么不是2的幂就不会等于0呢?
比如说3
3 111
2 010
那么是不会等于0的,因为其他位会补位,也就是一定有一个同为1的。
所以可以这样来运算。