Skip to content

c - 检验是否是2次幂

bool is_power_of_2(uint32_t n)
{
    return (n != 0) && ((n & (n - 1)) == 0);
}

解释

2次幂的数的二进制一定是仅具备一个1

十进制 二进制 1 1 (1 followed by 0 zero) 2 10 (1 followed by 1 zero) 4 100 (1 followed by 2 zeroes) 8 1000 (1 followed by 3 zeroes) . . . . . .

十进制 二进制 1 - 1 = 0 0 (0 followed by 0 one) 2 - 1 = 1 01 (0 followed by 1 one) 4 - 1 = 3 011 (0 followed by 2 ones) 8 - 1 = 7 0111 (0 followed by 3 ones) . . . . . .

很明显了两个数相与就是0了。