将大于i32的数字存储到变量中时,为什么不出现文字超出范围的错误?

Muh*_*fil 2 types literals rust

Rust文档说默认的整数类型是i32,这意味着变量默认可以保存的最大数字是2147483647ie 2e31 - 1。事实证明,这是千真万确的:如果我试图挽救数量大于2e31 - 1x变,我得到的错误literal out of range

fn main() {
    let x = 2147483647;
    println!("Maximum signed integer: {}", x);
    let x = 2e100;
    println!("x evalues to: {}", x);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我2e100x变量中保存值,为什么我不会出错?它的计算结果肯定大于2e31 - 1

输出量

fn main() {
    let x = 2147483647;
    println!("Maximum signed integer: {}", x);
    let x = 2e100;
    println!("x evalues to: {}", x);
}
Run Code Online (Sandbox Code Playgroud)

fn main() {
    let x = 2147483648;
    println!("Maximum signed integer: {}", x);
}
Run Code Online (Sandbox Code Playgroud)

输出量

Maximum signed integer: 2147483647
x evalues to: 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

mca*_*ton 8

诸如此类的常量文字2e100不是整数文字,而是浮点文字。这可以显示为

fn main() {
    let () = 2e100;
}
Run Code Online (Sandbox Code Playgroud)

产生

error[E0308]: mismatched types
 --> src/main.rs:2:9
  |
2 |     let () = 2e100;
  |         ^^ expected floating-point number, found ()
  |
  = note: expected type `{float}`
             found type `()`
Run Code Online (Sandbox Code Playgroud)

也可以看看: