Документация 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