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字符🦀。若所有输出与预期一致,则案例验证通过。

Rust 基本数据类型内存布局 整数类型 i8 1 字节 值: 127 i32 4 字节 值: -42 u64 8 字节 值: 42 字节数: i8=1 | i32=4 | u64=8 浮点类型 f32 4 字节 值: 3.14 f64 8 字节 值: 2.71828 字节数: f32=4 | f64=8 布尔与字符类型 bool 1 字节 值: true char (ASCII) 4 字节 值: 'R' char (Unicode) 4 字节 值: '🦀' 关键点: Rust 中 char 固定为 4 字节,可存储任意 Unicode 标量值 size_of::<T>() 编译期求值 | size_of_val(&var) 运行时查询