用一行代码判断一个数是否是2的次方

来源:百度知道 编辑:UC知道 时间:2024/06/04 19:33:41
1、if(n && ((n & (~n + 1)) == n))

2、if(n && !(n & (n - 1)))
谁能解释一下 我看不懂!~n是什么意思?

很简单,2个语句意思都一样,就来看第2个
if(n && !(n & (n - 1)))
判断分2部分,前面一个条件n很简单,就是说n!=0,下面!(n & (n - 1))
先分开来里面的n&(n-1),如果n是2的次方,2进制必然是1000这样1后面N个0,那n-1就必然是0111这样0后面连续几个1,这样2个按位与必然全是0000,然后!取反变成1,就是true,条件就符合了

取反吧