为什么在将大于i32的数字存储到变量中时,我没有得到文字超出范围错误?

问题描述 投票:2回答:1

Rust文档说默认的整数类型是i32,这意味着变量默认保存的最大数字是2147483647,即2e31 - 1。结果也是如此:如果我试图在2e31 - 1变量中保存比x更多的数字,我得到错误literal out of range

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

但如果我在2e100变量中保存值x,为什么我不会得到错误?它肯定会评估大于2e31 - 1

产量

Maximum signed integer: 2147483647
x evalues to: 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

fn main() {
    let x = 2147483648;
    println!("Maximum signed integer: {}", x);
}

产量

error: literal out of range for i32
 --> src/main.rs:2:11
  |
2 |     let x=2147483648;
  |           ^^^^^^^^^^
  |
  = note: #[deny(overflowing_literals)] on by default
types rust literals
1个回答
8
投票

2e100这样的常量文字不是整数文字,而是浮点文字。这可以显示

fn main() {
    let () = 2e100;
}

哪个产生

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

也可以看看:

© www.soinside.com 2019 - 2024. All rights reserved.