c++ - (n&(n-1))==0 和 n&(n-1)==0 在 C++ 中做什么?

标签 c++ bit-manipulation

(n&(n-1))==0n&(n-1)==0 做什么 (n是整数)在 C++ 中?

if ((n&(n-1))==0)
{
    // do something
}

if (n&(n-1)==0)
{
    // do something
}

最佳答案

他们假设要测试数字 n 是否是 2 的幂(尽管第二个没有像评论中提到的那样这样做)。它基于一个简单的观察,即在二进制表示中,2 的幂是仅有一位设置为 1 的唯一数字。如果从这样的数字中减去 1,您将得到 1 的序列。

示例(正):

n = 32

比二进制表示

n = 100000

然后 n - 1 = 011111 因此,如果您采用 n - 1 & n,您将得到 0

示例(负):

n = 6

比二进制表示

n = 110

现在

n - 1 = 101

所以 ((n - 1) & n) == 100 > 0

请注意,正如@harold 在他的评论中提到的,0 也将通过此测试。

关于c++ - (n&(n-1))==0 和 n&(n-1)==0 在 C++ 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21234217/

相关文章:

c++ - 将 32 位大端有符号整数转换为有符号小端整数

c++ - 按位切换最高有效字节和最低有效字节

c++ - g++ : should --std option change which STL/stdlib my code uses?

c++ - C++ 中 double 据类型的不一致

c++ - 如何用C++实现虚拟静态行为?

java - 如果值不适合则设置字节

我可以引用 C 位域的另一部分吗?

c++ - 使用位操作将 8 字节数字中的每个字节转换为单个字节

c++ - QML ListView 高度问题

c++ - 将数字附加到数字?