基础数据类型

1. 数值类型

https://course.rs/basic/base-type/numbers.html

整形类型,默认为 i32,即有符号 32 位。i 有符号,u 无符号,(i|u)size 视架构定。实现 std::cmp::Eq 特征,即完全比较。

i8, u8, i16, u16, i32, u32, i64, u64, i128, u128, isize, usize

浮点类型,默认为 f64,即双精度,实现的是 std::cmp::PartialEq 特征,即部分比较。

2. 浮点数陷阱

0.1 + 0.2 != 0.3 在低精度条件下成立,高精度条件下不成立!这是由于二进制无法精确表达 0.2

f32 条件下 0.1 + 0.2: 3e99999a,0.3: 3e99999a

f64 条件下 0.1 + 0.2: 3fd3333333333334,0.3: 3fd3333333333333

3. NaN

数学上未定义的数值类型,例如对负数取平方根 -42.1.sqrt(),所有跟 NaN 交互的操作,都会返回一个 NaN,而且 NaN 不能用来比较。

NaN != Nan,不能直接比较,而需要使用 number.is_nan()方法确定。

let x = (-42.0_f32).sqrt(); assert_eq!(x, x);

相同类型的数字才能进行运算!才能赋值!

let v: u16 = 38_u8 as u16;

4. Range 序列

快速生成指定范围的类数值类型,如 1..=5,’a’..=’z’,序列只允许用于数字或字符类型。