解释代码((n & (n-1))== 0)的含义

Posted borey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解释代码((n & (n-1))== 0)的含义相关的知识,希望对你有一定的参考价值。

思路:初步查看很难一眼分析出表达式是什么含义,我们不妨举例分析一下,假设 n = 5,二进制表示为101,那么 n-1 = 4,二进制表示为100, 5 & 4 = 101 & 100 = 100 = 4 != 0,下面我们来看更多的例子

5 & 4 = 101 & 100 = 4
6 & 5 = 110 & 101 = 4
7 & 6 = 111 & 110 = 6
8 & 7 = 1000 & 0111 = 0

我们会发现要使表达式等于0,n-1必须使得n的n-1都向高位进1,也就是说满足一下条件:

 x + 1 = n
 x & n = 0

我们来看看有那些数能满足要求:

10 & 01 = 0   -------2^1
100 & 011 = 0  -------2^2
1000 & 0111 = 0  -------2^3
10000 & 01111 = 0  -------2^4
。。。。。。

所谓代码((n & (n-1))== 0)的含义是n满足2的n次方

这种问题一般在于考察分析和解决问题的能力。

以上是关于解释代码((n & (n-1))== 0)的含义的主要内容,如果未能解决你的问题,请参考以下文章

java刷题--231 2的幂

java刷题--231 2的幂

231. 2的幂

去n的第一个出现的1

计算位数:这条线是如何工作的? n=n&(n-1); [复制]

n的二进制中有几个1