判断一个整数是不是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

⑧得证

填写留言

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。

无觅相关文章插件,快速提升流量