Rust基本类型
大约 4 分钟
Rust基本类型
类型 - 整型
分类
整形再分类:
按符号
有符号整型,英文 signed,既可以存储正数,也可以存储负数。
无符号整型,因为 unsigned,只能存储正数。
按存储大小
- 整型可以进一步划分为 1字节、2字节、4字节、8字节、16字节
- 整型的长度还可以是 arch。arch 是由 CPU 构架决定的大小的整型类型。大小为 arch 的整数在 x86 机器上为 32 位,在 x64 机器上为 64 位
- 技巧:最大和最小值范围可以分别这样打印:
- 最大值 std::u128::MAX,值为 340282366920938463463374607431768211455
- 最小值 std::i128::MIN,值为 -170141183460469231731687303715884105728
大小 | 有符号 | 无符号 | |
---|---|---|---|
8 bit | 1 Byte | i8 | u8 |
16 bit | 2 Byte | i16 | u16 |
32 bit (默认) | 4 Byte (默认) | i32 | u32 |
64 bit | 8 Byte | i64 | u64 |
128 bit | 16 Byte | i128 | u128 |
Arch | isize | usize |
代码示例
let price = 100; // i32 默认
let price2:u32 = 200;
let price3:i32 = -300;
let price4:isize = 400;
let price5:usize = 500;
println!("price is {}", price);
// 输出 price is 100
println!("price2 is {} and price3 is {}", price3, price2);
// 输出 price2 is -300 and price3 is 200
println!("price4 is {} and price5 is {}", price4, price5);
// 输出 price4 is 400 and price5 is 500
技巧:编译器提示
Rust有非常好的报错提示,报错非常清晰
类型和值不匹配
let price6:i32 = 66.66
// 编译不会通过,并且编译器报错如下
mismatched types [E0308] expected `i32`, found `f64`
整型溢出
let price7:i8 = 192; // 我们已经计算了 i8 的最大值是 127。我给一个更大的数值会如何呢?
println!("price7 is {}", price7);
// 报错如下,很明确的告诉你超出了 i8 的范围
16 | let price7:i8=192;
| ^^^
|
= note: `#[deny(overflowing_literals)]` on by default
= note: the literal `192` does not fit into the type `i8` whose range is `-128..=127`
= help: consider using the type `u8` instead
类型 - 浮点型
分类
按照存储大小,把浮点型划分为 f32 和 f64。其中 f64 是默认的浮点类型。
- f32 又称为 单精度浮点型。
- f64 又称为 双精度浮点型,它是 Rust 默认的浮点类型.
Rust 中不能将 0.0 赋值给任意一个整型,也不能将 0 赋值给任意一个浮点型。
代码示例
let price8:f64 = 99;
报错:mismatched types [E0308] expected `f64`, found `i32`
let price9 = 18.00; // 默认是 f64
let price10:f32 = 8.88;
let price11:f64 = 168.125; // 双精度浮点型
println!("price9 {}", price9); // 输出 price9 18
println!("price10 {}", price10); // 输出 price10 8.88
println!("price11 {}", price11); // 输出 price11 168.125
技巧:下划线
当数字很大的时候,Rust 可以用 **(_下划线) ** ,来让数字变得可读性更好。
let price12 = 1_000_000;
println!("price12 {}", price12); // 输出 price12 1000000
let price13 = 1_000_000.666_123;
println!("price13 {}", price13); // 输出 price13 1000000.666123
类型 - 布尔
Rust 使用 bool 关键字来声明一个 布尔类型 的变量。 布尔类型 取值是 true 或 false 。
let checked:bool = true;
println!("checked {}", checked); // 输出 checked true
类型 - 字符
字符(char) ,就是字符串的基本组成部分,也就是单个字符或字。
Rust 使用 UTF-8 作为底层的编码 ,而不是常见的使用 ASCII 作为底层编码。 Rust 中的 字符数据类型 包含了 数字、字母、Unicode 和 其它特殊字符。
let c = 'R';
println!("c {}", c); // 输出 c R
运算符
Rust 语言支持以下四种运算符
- 算术运算符
- 位运算符
- 关系运算符
- 逻辑运算符
算术运算符
名称 | 运算符 |
---|---|
加 | + |
减 | - |
乘 | * |
除 | / |
求余 | % |
注:Rust 语言不支持自增自减运算符 ++ 和 --
关系运算符
名称 | 运算符 | 说明 |
---|---|---|
大于 | > | 如果左操作数大于右操作数则返回 true 否则返回 false |
小于 | < | 如果左操作数小于于右操作数则返回 true 否则返回 false |
大于等于 | >= | 如果左操作数大于或等于右操作数则返回 true 否则返回 false |
小于等于 | <= | 如果左操作数小于或等于右操作数则返回 true 否则返回 false |
等于 | == | 如果左操作数等于右操作数则返回 true 否则返回 false |
不等于 | != | 如果左操作数不等于右操作数则返回 true 否则返回 false |
逻辑运算符
名称 | 运算符 | 说明 |
---|---|---|
逻辑与 | && | 两边的条件表达式都为真则返回 true 否则返回 false |
逻辑或 | || | 两边的条件表达式只要有一个为真则返回 true 否则返回 false |
逻辑非 | ! | 如果表达式为真则返回 false 否则返回 true |
位运算
名称 | 运算符 | 说明 |
---|---|---|
位与 | & | 相同位都是 1 则返回 1 否则返回 0 |
位或 | | | 相同位只要有一个是 1 则返回 1 否则返回 0 |
异或 | ^ | 相同位不相同则返回 1 否则返回 0 |
位非 | ! | 把位中的 1 换成 0 , 0 换成 1 |
左移 | << | 操作数中的所有位向左移动指定位数,右边的位补 0 |
右移 | >> | 操作数中的所有位向右移动指定位数,左边的位补 0 |