判断2次方数

August 8, 2018 · View on GitHub

给定一个正整数,写一个函数来查找它是否为 2的幂.

简单解决方案

在简单解决方案中,我们只是将 数字除以2,除非数字变为1,不然每次我们这样做,我们都会检查除法后的余数是为0. 否则数字不能是2的幂.

按位解决方案

判断2次方数总是只有一位. 唯一的例外是带符号整数 (例如,值为-128的8位有符号整数如下所示: 10000000)

1: 0001
2: 0010
4: 0100
8: 1000

因此,在检查数字大于零之后,我们可以使用按位来测试一个,且只设置一个位.

number & (number - 1)

例如数字8操作将如下所示:

  1000
- 0001
  ----
  0111
  
  1000
& 0111
  ----
  0000    

参考