0

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

这个问题曾在一次采访中被问到。

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

不使用 *, /, +, -,%运算符?

而且你也不能使用循环。

4

2 回答 2

15

检查二进制表示中是否恰好设置了一位。

于 2012-08-06T07:42:55.723 回答
9

使用好旧的n & (n - 1) == 0,转换成不使用操作符的方式-

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

    if (number == 0)
        return 0;

    return (number & numberMinusOne) == 0;
}
于 2012-08-06T08:01:55.137 回答