Debugger

作者 QIFAN 日期 2016-10-21
Debugger

Source: Cracking the Code Interview 5.5


Description

Explain what the following code does: $((n & (n-1 )) == 0)$.

思路

$1 & 0 = 0$
也就是说两个数的每一位数都不一样,而且这两个数是相邻的,怎么样的一个数字减一会导致所有的数字都改变呢?这就联想到了进位,999 + 1 = 1000,二进制的话 1111 + 1 = 100000。
问题解决!

Solution

只需检查n是否是2的指数,是则$((n & (n-1 )) == 0)$。