判断一个整数是不是2的乘方
如何判断一个整数是不是2的乘方?很简单
return n==0 ? false: (n&(n-1)==0)
对于2的乘方,二进制必然是 1000000000…的形式,n-1则为 0111111111….的形式
所以n与上n-1 就为0了
现在要证明,有且只有2的乘方符合 n&(n-1)==0
①对任何非0的n,必然含有至少一个1,则设 n=[a1,a2,a3....a32],n-1 = [b1,b2,b3....b32]
②设ai为1,1<=i<=32
③应有 ai & bi = 0 => bi=0
④可知在n-1的过程中,在i上发生借位,说明对于任意k>i,有ak=0
⑤同时,由于借位发生在i上,减法的过程将不影响更高的位数,于是对于任意j
⑥又bj & aj = 0 => bj = aj = 0
⑦则证明有且只有一个ai=1,而其他的位上都为0
⑧得证




