开发者

C#. Logical riddle with bit operations. Only one bit is set?

开发者 https://www.devze.com 2023-02-02 19:15 出处:网络
This should be easy for C++ people though. But I was asked how to do it in C#.开发者_高级运维 Shouldnt be much of difference.

This should be easy for C++ people though. But I was asked how to do it in C#.开发者_高级运维 Shouldnt be much of difference.

How to find out if a long variable has only one bit set?

I cant think anything except some brutal force shifting all bits and counting whats set.


A non-negative binary integer value x is a power of 2 if (x&(x-1)) is 0 using 2's complement arithmetic.

Powers of 2 would mean a single bit is set.

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

EDIT:

To allow for the zero case:

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


In C++:

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

Explanation: v & (v - 1) == 0 if only one bit is set or v == 0.


Just tried it in PHP:

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

精彩评论

暂无评论...
验证码 换一张
取 消