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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在将大于i32的数字存储到变量中时,我没有得到文字超出范围错误?相关的知识,希望对你有一定的参考价值。

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
答案

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 `()`

也可以看看:

以上是关于为什么在将大于i32的数字存储到变量中时,我没有得到文字超出范围错误?的主要内容,如果未能解决你的问题,请参考以下文章

在将 .csv 文件中的数据读取到 DataTable 中时,有没有办法强制所有列都是字符串?

为啥axios数据存储在变量中时未定义?

存储在 RabbitMQ 持久存储中时加密消息

如何在将JSON文件加载到BigQuery表中时管理/处理架构更改

当存储在变量中时,Socket.io 发射到 socket.id 不起作用

保存上传的文件