为什么在将大于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 中时,有没有办法强制所有列都是字符串?
如何在将JSON文件加载到BigQuery表中时管理/处理架构更改