C#。具有位操作的逻辑谜语。只设置了一位?

时间:2011-01-07 09:47:01

标签: c# c++ bit-manipulation

这对C ++人员来说应该很容易。但我被问到如何在C#中做到这一点。不应该有太大区别。

如何确定长变量是否只设置

除了一些残酷的力量移动所有位并计算最新设置之外,我什么都想不到。

3 个答案:

答案 0 :(得分:20)

  

如果使用2的补码算术(x&(x-1))为0,则非负二进制整数值x是2的幂。

2的幂意味着设置了一个位。

http://aggregate.org/MAGIC/#Is%20Power%20of%202

编辑:

允许零情况:

bool singleBit = x>0 && (x&(x-1))==0

答案 1 :(得分:3)

在C ++中:

unsigned long v;
bool f; // result
f = v && !(v & (v - 1));

说明:v& (v - 1)== 0如果只设置了一位或v == 0。

答案 2 :(得分:0)

刚刚在PHP中尝试过:

$singleBit = $bits && !($bits & ($bits - 1));