假设n的二进制表示为 (a10⋯0)2,其中 a表示若干个高位,1 表示最低位的那个 1,0⋯0表示后面的若干个 0,那么 n−1的二进制表示为:
(a01⋯1)2
我们将 (a10⋯0)2 与(a01⋯1)2进行按位与运算,高位 a不变,在这之后的所有位都会变为 0,这样我们就将最低位的那个 1 移除了。
因此,如果 n是正整数并且 n & (n - 1) = 0,那么 n就是 2的幂。
注:
一个数 n 是 2 的幂,当且仅当 n是正整数,并且 n的二进制表示中仅包含 1 个 1。使用位运算,将 n的二进制表示中最低位的那个 1提取出来,再判断剩余的数值是否为 0即可
n是正整数并且 n & (n - 1) = 0,那么 n就是 2的幂