types - Rust 中的数据类型
问题描述
fn diapason(amount_bits: u32) -> [i128; 2] {
let x:i128 = 2;
[-x.pow(amount_bits - 1), x.pow(amount_bits - 1) - 1]
}
fn signed_and_unsigned_int() {
let set_bits:[u32; 5] = [8, 16, 32, 64, 128];
for i in set_bits {
println!("i{} can store [{}, {}]", i,
diapason(i)[0], diapason(i)[1])
}
}
fn main() {
signed_and_unsigned_int()
}
美好的一天,我开始研究 Rust 并遇到了一个错误(线程 'main' 在 'attempt to multiply with overflow' 时惊慌失措)。我不明白为什么数字“2 的 128 次方”不适合 i128 类型?
C:/Users/HOME/.cargo/bin/cargo.exe run --color=always --package start_learning --bin start_learning
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target\debug\start_learning.exe`
i8 can store [-128, 127]
i16 can store [-32768, 32767]
i32 can store [-2147483648, 2147483647]
i64 can store [-9223372036854775808, 9223372036854775807]
thread 'main' panicked at 'attempt to multiply with overflow', C:\Users\HOME\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib/rustlib/src/rust\library\core\src\num\mod.rs:119:5
stack backtrace:
0: std::panicking::begin_panic_handler
at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b\/library\std\src\panicking.rs:493
1: core::panicking::panic_fmt
at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b\/library\core\src\panicking.rs:92
2: core::panicking::panic
at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b\/library\core\src\panicking.rs:50
3: core::num::{{impl}}::pow
at C:\Users\HOME\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\num\int_macros.rs:1586
4: start_learning::diapason
at .\src\main.rs:4
5: start_learning::signed_and_unsigned_int
at .\src\main.rs:12
6: start_learning::main
at .\src\main.rs:17
7: core::ops::function::FnOnce::call_once<fn(),tuple<>>
at C:\Users\HOME\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\ops\function.rs:227
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
error: process didn't exit successfully: `target\debug\start_learning.exe` (exit code: 101)
进程以退出代码 101 结束
解决方案
推荐阅读
- python - 无法将 LabJack U3 模型正确加载到 PyCharm
- c# - 禁用JS chrome selenium c#
- c - 使用定点而不是浮点计算信号频率
- java - 登录到一个页面,然后获取该登录名并自动登录到其他页面,而无需再次输入用户/密码
- json - 试图理解解组 JSON 后的类型
- node.js - 如何使用 multer 模块将图像上传到 mongodb
- vba - 如何根据书签中的数据命名文件
- javascript - 箭头函数可以在课堂上提升吗?(javascript)
- javascript - JavaScript RegExp 组 `**` 和 `+-*/`
- objective-c - 对于 Mac 上的所有用户,我如何以编程方式获取(Objective-C 或 Swift)用户所属的组列表?