如果给定的int是2 C的指数,则返回#

时间:2010-10-04 21:49:05

标签: c#

给定一个接收int变量的bool数据类型的方法,什么是单个代码行,它将确定int是2还是2 ^ n的指数... ..2,4,8,16,32等我知道使用while循环和if语句的方法,但我正在寻找它在一行。

4 个答案:

答案 0 :(得分:9)

来自Bit Twiddling Hacks

uint v;         // we want to see if v is a power of 2
bool f;         // the result goes here 

f = (v != 0) && ((v & (v - 1)) == 0);

答案 1 :(得分:6)

只需检查数字的日志(基数2)是否为整数。

在C#的一行中:

Math.Log(x, 2) % 1 == 0

按位操作更有趣,但是主人怜悯任何人必须维护该代码。

答案 2 :(得分:4)

bool powerOfTwo = (unchecked(n & (n-1)) == 0) && (n != 0)

答案 3 :(得分:1)

bool answer = ((n & ~(n-1)) == n && n!=0);

这通过了我投入的所有基本测试。

看起来不错。