4.variable 变量 - 标量类型

This commit is contained in:
Shikong 2022-07-10 17:01:28 +08:00
parent 11e4515c78
commit 8c17b3572d

View File

@ -20,9 +20,99 @@ fn main() {
// 若使用 let 声明新的同名变量, 那么新的变量也是不可变的 // 若使用 let 声明新的同名变量, 那么新的变量也是不可变的
// 使用 let 声明新的变量, 它的类型可以与之前不同 // 使用 let 声明新的变量, 它的类型可以与之前不同
let y = 2; let y = 2;
println!("变量 y 的值为 {}",y); println!("变量 y (i32) 的值为 {}", y);
let y = (y * 2).to_string(); let y = (y * 2).to_string();
println!("变量 y 的值为 {}",y); println!("变量 y (String) 的值为 {}", y);
// 编译时需要知道具体的类型, 可能的类型较多 入 u32 i32 等, 就需要添加类型的标注
let y: u32 = y.parse().expect("不是一个数字");
println!("变量 y (u32) 的值为 {}", y);
// 标量类型
// rust 主要的几个标量类型
// 整数类型
// 浮点类型
// 布尔类型
// 字符类型
// 整数类型 没有小数部分
// u32 就是一个无符号的整数类型 占据 32 位 空间
// i32 为有符号整数类型
// isize 和 usize 的位数由 程序运行的计算机架构所决定
// 若 计算机为 64位 那么 isize 相当于 i64, usize 相当于 u64
// 主要使用场景 为 对某种集合进行索引操作
// i8 i16 i32 i64 i128 isize
// u8 u16 u32 u64 u128 usize;
// 整数字面值
// 2进制 0b1111 0b1111_1111
// 8进制 0o77 0o777_777
// 10进制 10086 10_086
// 16进制 0xff 0xfff
// 字节类型(u8) b'A' b'C'
// 除了 byte 类型外 所有数值字面值允许使用 类型后缀 如
// 10086u32 10010i32 10000u64
// 整数类型 默认 为 i32
// 整数溢出
// 如 u8 的范围是 0~255
// 如果将 u8 的值设为 256, 那么
// 调试模式 下 rust 会检查溢出 若发生溢出 则 引发 panic
// 发布模式(release) 下, rust 不会检查可能导致 panic 的整数溢出
// 若溢出则会出现环绕操作 如 256 -> 0, 257 -> 1, 但不会引发 panic
// 浮点类型
// rust 有两种 基础浮点类型
// f32 单精度 32位 浮点数
// f64 双精度 64位 浮点数
// 浮点类型 默认 为 f64
// f64
let x = 2.55555555;
println!("变量 x (f64) 的值为 {}", x);
// f32
let y: f32 = 3.14;
println!("变量 y (f32) 的值为 {}", y);
// 布尔类型
// true 和 false
let t = true;
println!("变量 t (bool) 的值为 {}", t);
let t: bool = false;
println!("变量 t (bool) 的值为 {}", t);
// 字符类型
// rust 中 char 描述语言中最基础 的 单个 字符
// 字符类型的字面值 使用 单引号
// 每个字符 占用 4个 字节 大小
// 为 unicode 标量值 可表示 ascii、中文、零长度字符、emoji 等
// U+0000 ~ U+D7FF
// U+E000 ~ U+10FFFF
let c = 'c';
println!("变量 c (char) 的值为 {}", c);
let c: char = '中';
println!("变量 c (char) 的值为 {}", c);
let c = '🤖';
println!("变量 c (char) 的值为 {}", c);
// 复合类型
// 复合类型 可以 将多个值 放在 一个类型 里
// rust 提供 2 种 基础的复合类型 数组、元组
// Tuple (元组) 元组的长度是固定的, 一旦声明就无法修改
let tup: (i32, f64, &str) = (1, 0.0, "666");
println!("变量 tup (Tuple) 的值为 {} {} {}", tup.0, tup.1, tup.2);
// 可以使用 模式匹配 解构 一个 Tuple 来 获取元素 的值
let (x,y,z) = tup;
println!("变量 x (i32) 的值为 {}", x);
println!("变量 y (f64) 的值为 {}", y);
println!("变量 z (&str) 的值为 {}", z);
} }