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 `()`
也可以看看: