在C#中计算2的整数幂的简单方法?

发布于 2024-10-29 01:10:05 字数 412 浏览 1 评论 0原文

我确信这并不像我想象的那么困难。

想要使用等价于 Math.Pow(double, double) 但输出整数的东西。我担心浮点的舍入误差。

我能想到的最好的办法是:

uint myPower = 12;
uint myPowerOfTwo = (uint)Math.Pow(2.0, (double)myPower);

我想到了这一点:

uint myPowerOfTwo = 1 << myPower;    // doesn't work

但我得到了运算符“<<”的错误不能与 int 和 uint 类型的操作数一起使用。

有什么建议吗?一如既往地感谢。

I'm sure this isn't as difficult as I'm making it out to be.

Would like to use something equivalent to Math.Pow(double, double) but outputting an integer. I'm concerned about roundoff errors with the floating points.

The best I can come up with is:

uint myPower = 12;
uint myPowerOfTwo = (uint)Math.Pow(2.0, (double)myPower);

I thought of this:

uint myPowerOfTwo = 1 << myPower;    // doesn't work

but I get the error that operator "<<" cannot be used with operands of type int or and uint.

Any suggestions? Thanks as always.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

煮酒 2024-11-05 01:10:05

您必须对移位运算符的第二个操作数(右侧)使用有符号整数:

int myPower = 12;
int myPowerOfTwo = 1 << myPower;   

当然,您可以将结果转换为其他数字类型,例如 uint:

uint myPowerOfTwo = (uint) (1 << myPower);   

来自 MSDN

左移运算符 (<<) 移位
它的第一个操作数左边的数字
由其第二个指定的位
操作数。 第二个操作数的类型必须是 int

you will have to use a signed integer for the second operand (right hand side) of the shift operator:

int myPower = 12;
int myPowerOfTwo = 1 << myPower;   

Of course you can cast the result to another numeric type such as uint:

uint myPowerOfTwo = (uint) (1 << myPower);   

From MSDN:

The left-shift operator (<<) shifts
its first operand left by the number
of bits specified by its second
operand. The type of the second operand must be an int.

邮友 2024-11-05 01:10:05

如果您创建扩展/静态方法,那么稍后会更容易找到并纠正任何错误,并且优化器仍会内联它:

public static uint Exp2(this uint exponent) {
    return (uint)Math.Pow(2.0, (double)exponent);
}

然后您可以使用如下内容:

uint myPowerOfTwo = myPower.Exp2();

If you make an extension/static method, then it would be easier to find and correct any errors later and the optimizer would still inline it:

public static uint Exp2(this uint exponent) {
    return (uint)Math.Pow(2.0, (double)exponent);
}

Then you can use like:

uint myPowerOfTwo = myPower.Exp2();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文