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

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

如何确定长变量是否设置了一位?

我想不出什么,除了一些残酷的力量转移所有位和计算什么设置。

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

2的幂将意味着设置单个位。

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

编辑:

允许零情况:

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

在C ++中:

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

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

刚刚在PHP中尝试过:

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