幂运算

(一)2 的幂

  • 若 n = 2^x且 x 为自然数(即 n 为 2 的幂),则一定满足以下条件:
    1. 恒有 n & (n - 1) == 0,这是因为:一定满足 n > 0。
      • nn 二进制最高位为 1,其余所有位为 0
      • n - 1n1 二进制最高位为 0,其余所有位为 1

  因此可以根据 n > 0 && (n & (n -1) == 0)来判断

 

(二)4 的幂

  • 如果一个数是4的幂,那也一定是2的幂。
  • 如果 n 是 4的幂,那么 n 的二进制表示中有且仅有一个 1,并且这个 1 出现在从低位开始的第偶数个二进制位上(这是因为这个 1 后面必须有偶数个 0)。

  因此我们可以构造一个整数 m,它的所有偶数二进制位都是 0,所有奇数二进制位都是 1

  这样一来,我们将 n 和 m 进行按位与运算,如果结果为 0,说明 n二进制表示中的 1 出现在偶数的位置,否则说明其出现在奇数的位置。

  m 也可以写成十六进制的0xaaaaaaaa

posted @ 2021-05-31 20:13  助手的fork  阅读(423)  评论(0编辑  收藏  举报