Debugger: Explain what the following code does: ((n & (n - 1)) == 0)
.
Hints: #157, #202, #261, #302, #346, #372, #383, #398
解法
当以下情况时这段代码返回true:
- n是2的次方,且n > 1的时候
- 或者,n是0
两个数字AND
结果为0代表两个数字没有一个1
在相同的位置。
当你在给二进制做减法的时候,实际上是把最右边的1
变成0
,把它右边的0
都变成1
。
|
|
当(n & (n - 1)) == 0
就意味着这个n
里最右边的1
的左边没有1
了,也就是说只有一个1
,这就意味着n
是2的次方。
评论