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

C# 如果给定的int是2c的指数,则返回#,c#,C#,给定一个接受int变量的bool数据类型的方法,什么是确定int是2或2^n的指数的一行代码?…2,4,8,16,32等。我知道一种使用while循环和if语句的方法,但我希望它在一行上。只要检查日志(以2为基数)这个数字的最大值是一个整数 在C#的一行中: 按位操作更有趣,但上帝保佑那些必须维护代码的人。来自: 这通过了我对它的所有基本测试 看起来不错。例如25怎么样?平方根是5(一个整数),但在这种情况下不是一个有效的数字。它被否决了,因为我最初误读了这个问题并给出了错误的答案。它已经被编辑

给定一个接受int变量的bool数据类型的方法,什么是确定int是2或2^n的指数的一行代码?…2,4,8,16,32等。我知道一种使用while循环和if语句的方法,但我希望它在一行上。

只要检查日志(以2为基数)这个数字的最大值是一个整数

在C#的一行中:

按位操作更有趣,但上帝保佑那些必须维护代码的人。

来自:

这通过了我对它的所有基本测试


看起来不错。

例如25怎么样?平方根是5(一个整数),但在这种情况下不是一个有效的数字。它被否决了,因为我最初误读了这个问题并给出了错误的答案。它已经被编辑成一个正确的解决方案。@Tom那我们为什么要关心平方根呢?这是对数。适用于uint,但对于int变量,需要排除0x80000000,因此,请更改对v的检查!=0到v>0,则设置为开始。
Math.Log(x, 2) % 1 == 0
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);
bool powerOfTwo = (unchecked(n & (n-1)) == 0) && (n != 0)
bool answer = ((n & ~(n-1)) == n && n!=0);