这对C ++人员来说应该很容易。但我被问到如何在C#中做到这一点。不应该有太大区别。
如何确定长变量是否只设置
除了一些残酷的力量移动所有位并计算最新设置之外,我什么都想不到。
答案 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));