(n&(n-1))==0
和 n&(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/