「数学」判断一个正整数是不是 2 的整数次幂

154 阅读1分钟

请证明以下命题

对于任意正整数 n,如果 n & (n-1) === 0,那么 n 一定是 2 的整数次幂。

证明

对于任意一个正整数 n,执行 n-1 后,其二进制形式的变化是:

  1. 最后一个1之前的不变
  2. 最后一个1变为0
  3. 最后一个1后面的0都变为1

比如:

10100 -> 10001
11010 -> 11001

所以,如果 n & (n-1) === 0,说明 n的二进制形式中,最后一个1之前没有 1,因为前面有 1 的话,n & (n-1) 的结果不可能是 0

也就是说,n 的二进制只有最后一个1,即 n 的二进制只有一个 1,这样的形式就是 2 的幂,如 0001, 0010, 0100, 1000, ...,原命题得证。

更多

力扣上有一道题 ---- 2的幂,就是笔者讨论的这个问题,里面有详细的讨论,可以获取更多信息。