给定一个接收int变量的bool数据类型的方法,什么是单个代码行,它将确定int是2还是2 ^ n的指数... ..2,4,8,16,32等我知道使用while循环和if语句的方法,但我正在寻找它在一行。
答案 0 :(得分:9)
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);
这通过了我投入的所有基本测试。
看起来不错。