Rust中最简单的数据类型称为原始数据类型
一、标量类型(Scalar Types)
- 整数类型(Integer)
| 长度 | 有符号 | 无符号 |
|---|---|---|
| 8-bit | i8 |
u8 |
| 16-bit | i16 |
u16 |
| 32-bit | i32 |
u32 |
| 64-bit | i64 |
u64 |
| 128-bit | i128 |
u128 |
| 平台相关 | isize |
usize |
isize和usize是什么呀???
这两个类型的位数取决于你的计算机类型,32位计算机,isize和usize和i32,u64一样。64位计算机,isize和usize和i64,u64一样。
整个两种类型,有啥实际用途?
具体请看这篇文章:大白话rust系列03 isize和usize
2. 浮点类型(Floating-Point)
| 类型 | 精度 |
|---|---|
f32 |
单精度(32 位) |
f64 |
双精度(64 位) |
-
默认浮点类型是
f64 -
遵循 IEEE-754 标准
rust
let x: f32 = 3.14;
let y: f64 = 2.71828;
3. 布尔类型(Boolean)
-
bool,只有两个值:true和false -
占 1 个字节
rust
let t: bool = true;
let f: bool = false;
4. 字符类型(Character)
rust的char作为字符,用单引号 表示,如'6','A' ,'大' 等。每个char在内存中都是数字,如A是65。而汉字"友"是数字21451。char占32位也就是4个字节。将字符变为数字的编码方式是Unicode
ASCII 共有 128 个字符(编码范围 0--127)。
如果算上扩展 ASCII(Extended ASCII),则通常有 256 个字符 (0--255),但扩展部分并没有统一标准。扩展 ASCII 具体是哪些字符,取决于你用的是哪个代码页,在此不做深究
这里提到ASCII,是因为,它的字符数刚好满足u8的大小范围。所以,rust是可以安全地将u8转换为char的,如下面的代码所示
rust
fn main() {
let numberToChar = 100;
println!("numberToChar {} as char = {}", numberToChar, numberToChar as u8 as char);
}
运行结果:

rust中char为了能覆盖所有的字符,一个char用了四个字节存储
但是char在字符串中,并不会每个字符都采用四字节,它会尽可能地使用小位数来节省内存
rust
fn main() {
println!("Size of char : {}",std::mem::size_of::<char>());
let c = '我';
println!("'我' 占 {} 个字节", c.len_utf8());
}
运行结果:

那么rust还有哪些原始数据类型呢
复合类型(Compound Types)
Rust 有 2 种原始复合类型:
1. 元组(Tuple)
2. 数组(Array)
关于这两种类型后面再单独介绍,再次不多做阐述
总结表
| 类别 | 类型 |
|---|---|
| 标量 - 整数 | i8 i16 i32 i64 i128 isize / u8 u16 u32 u64 u128 usize |
| 标量 - 浮点 | f32 f64 |
| 标量 - 布尔 | bool |
| 标量 - 字符 | char |
| 复合 - 元组 | (T1, T2, ...) |
| 复合 - 数组 | [T; N] |
以上共 4 种标量类型 + 2 种复合类型 ,就是 Rust 的全部原始数据类型。此外还有单元类型 () (零元组)和永不返回类型 !(never type),它们也属于原始类型范畴。