第5章 - 数据类型
嗨,朋友!我是长安。
上一章我们学习了变量,现在让我们看看变量可以存储什么类型的数据。
Rust 是一门静态类型语言,这意味着编译器在编译时就需要知道所有变量的类型。不过大多数时候,Rust 可以自动推断类型,你不需要显式标注。
🔢 标量类型
标量类型表示单个值。Rust 有四种主要的标量类型:整数、浮点数、布尔值和字符。
整数类型
整数就是没有小数部分的数字。
fn main() {
let age: i32 = 25; // 有符号 32 位整数
let count: u32 = 100; // 无符号 32 位整数
let big_number: i64 = 1_000_000; // 可以用下划线分隔,增加可读性
println!("年龄: {}", age);
println!("数量: {}", count);
println!("大数: {}", big_number);
}
整数类型一览表:
| 长度 | 有符号 | 无符号 |
|---|---|---|
| 8位 | i8 | u8 |
| 16位 | i16 | u16 |
| 32位 | i32 | u32 |
| 64位 | i64 | u64 |
| 128位 | i128 | u128 |
| arch | isize | usize |
- 有符号(i 开头):可以是正数或负数
- 无符号(u 开头):只能是正数
- isize/usize:取决于你的计算机架构(32 位系统是 32 位,64 位系统是 64 位)
长安说
不知道用哪种?默认用 i32,这是最常用的,性能也很好。需要存储列表索引时用 usize。
浮点数类型
浮点数就是有小数点的数字。
fn main() {
let pi: f64 = 3.14159; // 64 位浮点数(默认)
let x: f32 = 2.0; // 32 位浮点数
println!("π ≈ {}", pi);
println!("x = {}", x);
}
Rust 有两种浮点类型:
f32:32 位,单精度f64:64 位,双精度(默认,精度更高)
布尔类型
布尔值只有两个可能:true 或 false。
fn main() {
let is_sunny: bool = true;
let is_raining = false; // 类型推断为 bool
println!("今天晴天吗? {}", is_sunny);
println!("在下雨吗? {}", is_raining);
}
字符类型
字符类型用单引号表示,可以表示任何 Unicode 字符。
fn main() {
let letter: char = 'A';
let heart = '❤';
let chinese = '中';
println!("字母: {}", letter);
println!("爱心: {}", heart);
println!("汉字: {}", chinese);
}
注意
- 字符用单引号
'A' - 字符串用双引号
"Hello" char类型占 4 个字节,可以表示任何 Unicode 字符
📦 复合类型
复合类型可以将多个值组合成一个类型。
元组(Tuple)
元组可以把不同类型的值组合在一起。
fn main() {
let person: (&str, i32, f64) = ("长安", 25, 1.75);
println!("姓名: {}", person.0);
println!("年龄: {}", person.1);
println!("身高: {}米", person.2);
// 解构元组
let (name, age, height) = person;
println!("{} 今年 {} 岁,身高 {} 米", name, age, height);
}
数组(Array)
数组中所有元素必须是相同类型,且长度固定。
fn main() {
let numbers: [i32; 5] = [1, 2, 3, 4, 5];
let months = ["一月", "二月", "三月"];
println!("第一个数字: {}", numbers[0]);
println!("第三个月: {}", months[2]);
// 创建包含 5 个 0 的数组
let zeros = [0; 5]; // [0, 0, 0, 0, 0]
println!("零数组: {:?}", zeros);
}
💡 小结
- 标量类型:整数(i32/u32)、浮点数(f32/f64)、布尔值(bool)、字符(char)
- 复合类型:元组(tuple)、数组(array)
- Rust 可以自动推断类型,但你也可以显式标注
- 使用
{}打印单个值,{:?}打印复合类型(调试格式)
🚀 下一步
💪 练习题
- 声明一个
i64类型的变量存储你的出生年份 - 创建一个元组存储你的个人信息(姓名、年龄、身高)
- 创建一个包含一周七天名称的数组
- 打印数组的第一个和最后一个元素
答案示例
fn main() {
// 练习1
let birth_year: i64 = 1998;
println!("出生年份: {}", birth_year);
// 练习2
let my_info = ("长安", 25, 1.75);
println!("信息: {:?}", my_info);
// 练习3
let weekdays = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"];
// 练习4
println!("第一天: {}", weekdays[0]);
println!("最后一天: {}", weekdays[6]);
}
