跳至主要內容

Rust基本类型

LincZero大约 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 bit1 Bytei8u8
16 bit2 Bytei16u16
32 bit (默认)4 Byte (默认)i32u32
64 bit8 Bytei64u64
128 bit16 Bytei128u128
Archisizeusize

代码示例

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