3. 数据类型探索 声明整数、浮点数、布尔、字符等基本类型,并打印它们的大小和值。
任务说明
本案例要求声明Rust中的整数、浮点数、布尔、字符等基本类型变量,并打印每个变量的大小(字节数)和值。通过本案例,你将掌握Rust基本数据类型的字面量写法、类型标注方式,以及std::mem::size_of_val函数的使用。
代码实现
fn main() {
// 整数类型
let signed_int: i32 = -42;
let unsigned_int: u64 = 42;
let small_int: i8 = 127;
// 浮点数类型
let float_32: f32 = 3.14;
let float_64: f64 = 2.71828;
// 布尔类型
let is_rust_awesome: bool = true;
// 字符类型(Unicode标量值)
let letter: char = 'R';
let emoji: char = '🦀';
// 打印每种类型的值
println!("=== 值 ===");
println!("signed_int = {}", signed_int);
println!("unsigned_int = {}", unsigned_int);
println!("small_int = {}", small_int);
println!("float_32 = {}", float_32);
println!("float_64 = {}", float_64);
println!("is_rust_awesome = {}", is_rust_awesome);
println!("letter = {}", letter);
println!("emoji = {}", emoji);
// 打印每种类型的大小(字节)
println!("\n=== 大小(字节)===");
println!("i32 大小 = {} 字节", std::mem::size_of::<i32>());
println!("u64 大小 = {} 字节", std::mem::size_of::<u64>());
println!("i8 大小 = {} 字节", std::mem::size_of::<i8>());
println!("f32 大小 = {} 字节", std::mem::size_of::<f32>());
println!("f64 大小 = {} 字节", std::mem::size_of::<f64>());
println!("bool 大小 = {} 字节", std::mem::size_of::<bool>());
println!("char 大小 = {} 字节", std::mem::size_of::<char>());
// 使用 size_of_val 直接查询变量占用内存
println!("\n=== 变量实际占用(size_of_val)===");
println!("signed_int 占用 {} 字节", std::mem::size_of_val(&signed_int));
println!("unsigned_int 占用 {} 字节", std::mem::size_of_val(&unsigned_int));
println!("small_int 占用 {} 字节", std::mem::size_of_val(&small_int));
println!("float_32 占用 {} 字节", std::mem::size_of_val(&float_32));
println!("float_64 占用 {} 字节", std::mem::size_of_val(&float_64));
println!("is_rust_awesome 占用 {} 字节", std::mem::size_of_val(&is_rust_awesome));
println!("letter 占用 {} 字节", std::mem::size_of_val(&letter));
println!("emoji 占用 {} 字节", std::mem::size_of_val(&emoji));
}
关键说明
- 整数类型:
i32(有符号32位)、u64(无符号64位)、i8(有符号8位),分别覆盖负数、大正数和小范围整数场景。 - 浮点类型:
f32单精度、f64双精度,Rust默认浮点字面量推断为f64。 - 布尔类型:仅
true/false两个值,占用1字节。 - 字符类型:
char为Unicode标量值,占用4字节,支持中文、emoji等任意Unicode字符。 - 大小查询:
std::mem::size_of::<T>()返回类型T的字节大小;std::mem::size_of_val(&var)返回变量实际占用的字节数。
编译与运行
# 创建项目(或直接使用 rustc)
mkdir type_basics && cd type_basics
cargo init --name type_basics
# 将上述代码写入 src/main.rs
# 编译并运行
cargo run
若使用rustc直接编译:rustc main.rs && ./main(Windows下为main.exe)。
预期输出
=== 值 ===
signed_int = -42
unsigned_int = 42
small_int = 127
float_32 = 3.14
float_64 = 2.71828
is_rust_awesome = true
letter = R
emoji = 🦀
=== 大小(字节)===
i32 大小 = 4 字节
u64 大小 = 8 字节
i8 大小 = 1 字节
f32 大小 = 4 字节
f64 大小 = 8 字节
bool 大小 = 1 字节
char 大小 = 4 字节
=== 变量实际占用(size_of_val)===
signed_int 占用 4 字节
unsigned_int 占用 8 字节
small_int 占用 1 字节
float_32 占用 4 字节
float_64 占用 8 字节
is_rust_awesome 占用 1 字节
letter 占用 4 字节
emoji 占用 4 字节
验证方法
运行程序后,观察输出是否符合上述预期:i32为4字节、u64为8字节、i8为1字节、f32为4字节、f64为8字节、bool为1字节、char为4字节。同时确认各变量的值打印正确,特别是char类型能正常显示emoji字符🦀。若所有输出与预期一致,则案例验证通过。