如何将数字提升到一个权力?

Mat*_*aun 18 operators exponentiation rust

我试图使用插入符号运算符(^)将整数提升到一个幂,但我得到了令人惊讶的结果,例如:

assert_eq!(2^10, 8);
Run Code Online (Sandbox Code Playgroud)

搜索DuckDuckGo和谷歌没有透露任何相关信息.

如何在Rust中执行取幂?

小智 16

对于整数:

fn main() {
   let n = u32::pow(2, 10);
   println!("{}", n == 1024);
}
Run Code Online (Sandbox Code Playgroud)

对于浮标:

fn main() {
   // example 1
   let f = f32::powf(2.0, 10.0);
   // example 2
   let g = f32::powi(2.0, 10);
   // print
   println!("{}", f == 1024.0 && g == 1024.0);
}
Run Code Online (Sandbox Code Playgroud)

或者,由于你的底数是 2,你也可以使用shift:

fn main() {
   let n = 2 << 9;
   println!("{}", n == 1024);
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*aun 15

插入符号运算符^不用于取幂,它是按位XOR运算符.

通过除锈方法提供幂powchecked_pow其警卫对溢出.

因此,要将2提高到10的幂,请执行以下操作:

let base: i32 = 2; // an explicit type is required
assert_eq!(base.pow(10), 1024);
Run Code Online (Sandbox Code Playgroud)

  • @Stargateur在这种情况下,编译器会优化整个操作,但是当基础未知时,编译器似乎就不会像这样:[godbolt](https://godbolt.org/g/VJKgn1)。 (2认同)

Mor*_*pin 10

我正在尝试与OP相同的事情。感谢其他答案作者。

这是对我有用的变体:

let n = 2u32.pow(10);
Run Code Online (Sandbox Code Playgroud)

它使用文字无符号 32 位整数来设置类型和基数,然后调用pow()其上的函数。


小智 9

这是您可以使用的最简单的方法:

let a = 2; // Can also explicitly define type i.e. i32
let a = i32::pow(a, 10);
Run Code Online (Sandbox Code Playgroud)

它将输出“2 的 10 次方”,即:

1024