检查数字是否为2 ^ n

Ash*_*wal 0 c math logic bit-manipulation

可能重复:
如何检查数字是否为2的幂

这个问题在接受采访时被问到了.

如何检查数字的2^n格式是{1,2,4,8,16,32 ......

不使用 *,/,+,-,%运营商?

而你也不能使用循环.

aio*_*obe 15

检查二进制表示中是否只设置了一位.

  • @Cicada,除非我们假设整数,*任何大于或等于零的数字是2的幂. (3认同)
  • 有一个x86汇编指令,用于计算整数值中的设置位数. (2认同)

use*_*016 9

使用旧的n & (n - 1) == 0,以不使用运算符的方式进行转换-.

int powerOfTwo(int number)
{
    int numberMinusOne = --number;
    ++number;

    if (number == 0)
        return 0;

    return (number & numberMinusOne) == 0;
}
Run Code Online (Sandbox Code Playgroud)