概述
- Rust 的数值类型包括整数和浮点数。
- 整数没有小数部分,浮点数带有小数点。
- Rust 支持运算符重载,允许在复杂类型上定义运算符。
整数类型
- 整数分为有符号和无符号两种。
- Rust 中的整数类型包括 i8, i16, i32, i64, i128 和 isize 以及对应的无符号类型 u8, u16, u32, u64, u128 和 usize。
- 整数字面量可以使用不同的基数表示,例如十进制、十六进制、八进制、二进制。
整型溢出
- Rust 在 debug 模式下会检查整型溢出并导致程序 panic。
- release 模式下不检查溢出,而是按照补码循环溢出规则处理。
- 可以使用标准库提供的方法显式处理溢出,例如 wrapping_add。
浮点类型
- Rust 的浮点类型有 f32 和 f64,分别对应 32 位和 64 位。
- 默认浮点类型是 f64,因为它在现代 CPU 中的速度与 f32 相近但精度更高。
浮点数陷阱
- 浮点数是近似值,无法精确表示所有十进制小数。
- 浮点数不能用于 HashMap 的键,因为它们没有实现 Eq 特征。
数字运算
- Rust 支持基本的数学运算:加法、减法、乘法、除法和取模。
- 运算符与其他语言一致。
位运算
- Rust 的位运算包括:位与 (&)、位或 (|)、异或 (^)、位非 (!)、左移 (<<) 和右移 (>>)。
序列(Range)
- Rust 提供序列来生成连续数值,例如 1..5 生成从 1 到 4 的数字。
类型转换
有理数和复数
- Rust 标准库不包含有理数和复数,但社区提供了 num 库。
代码示例
fn main() {
let a: u8 = 255;
let b = a.wrapping_add(20);
println!("{}", b);
let x = 2.0;
let y: f32 = 3.0;
assert!(0.1 + 0.2 == 0.3);
let a:i32 = 2;
let b:i32 = 3;
println!("(a & b) value is {}", a & b);
for i in 1..=5 {
println!("{}", i);
}
let decimal: f32 = 42.0;
let integer: i32 = decimal as i32;
use num::complex::Complex;
let a = Complex { re: 2.1, im: -1.2 };
let b = Complex::new(11.1, 22.2);
let result = a + b;
println!("{} + {}i", result.re, result.im);
}
总结
- Rust 的数值类型丰富,需要根据需求选择合适的类型。
- 类型转换必须是显式的。
- Rust 的数值类型可以使用方法进行操作。