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

Bop*_*Bop 6 c# c++ bit-manipulation

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

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

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

spe*_*der 21

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

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

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

编辑:

允许零情况:

bool singleBit = x>0 && (x&(x-1))==0
Run Code Online (Sandbox Code Playgroud)

  • +1:只是旁注:对于负值,只有1位设置的唯一一个是"long.MinValue" (3认同)