在 Rust 中,变量声明与赋值是编程的基础。每个变量都必须先声明,然后才能使用。Rust 是一种静态类型语言,这意味着每个变量都有一个特定的类型,并且在编译时确定。
为什么使用变量?因为需求,譬如有时需要计算0-100的和,有时需要计算0-1000的和,这种情况下,最好用某个字符如count指代要求和的数,看情况给这个count 100或1000的具体值。
变量声明
在 Rust 中,你可以使用 let
关键字来声明一个变量。声明时可以指定类型,也可以让编译器自动推断。
let x: i32 = 5; // 明确指定类型为 i32
let y = 5; // 自动推断为 i32
基本数据类型
Rust 的基本数据类型包括:
-
整数(Integers)
- 有符号整数:
i8
,i16
,i32
,i64
,i128
和isize
(根据平台可能是 32 位或 64 位) - 无符号整数:
u8
,u16
,u32
,u64
,u128
和usize
(根据平台可能是 32 位或 64 位)
- 有符号整数:
-
浮点数(Floating-Point Numbers)
-
f32
和f64
(默认是f64
)
-
-
布尔值(Booleans)
- 类型为
bool
,只有两个可能的值:true
和false
- 类型为
-
字符(Characters)
- 类型为
char
,用单引号表示,代表一个 Unicode 字符
- 类型为
在Rust编程语言中,关于i8,i32里面数字的解释:
-
i8
- 这是一个有符号的8位整数类型。这意味着它用来表示范围从-128
到127
的整数。 -
i32
- 这是一个有符号的32位整数类型。它通常用来表示一般的整数,其范围从-2,147,483,648
到2,147,483,647
。
i8的二进制范围是00000000 到 11111111,每一个01在二进制里叫位。i8在内存里占用了8个二进制的空间。
整数的不同表达形式
在Rust中,你可以使用不同的进制来表示数字。下面是一些基本的方法:
- 十进制(Decimal): 这是默认的进制,不需要任何前缀。
let decimal = 123; // 十进制数123
- 十六进制(Hexadecimal): 以
0x
或0X
开头。let hex = 0xff; // 十六进制数FF,等于十进制的255
- 八进制(Octal): 以
0o
或0O
开头。let octal = 0o77; // 八进制数77,等于十进制的63
- 二进制(Binary): 以
0b
或0B
开头。let binary = 0b1111_0000; // 二进制数11110000,等于十进制的240
在Rust中,你可以在数字字面量中使用下划线 _
来增加可读性,但它不会影响数字的值。例如,0b1111_0000
和 0b11110000
是相同的。
请注意,这些进制表示方法仅适用于数字字面量。如果你在代码中需要进行进制转换,可以使用标准库中的 From
trait 或其他相关函数。
示例
let a: i32 = 5; // 有符号整数
let b: f64 = 5.0; // 浮点数
let c: bool = true; // 布尔值
let d: char = 'a'; // 字符
注意事项
- Rust 中的变量默认是不可变的(immutable),这意味着一旦赋值就不能更改。如果你需要一个可变变量,可以在声明时使用
mut
关键字。 - Rust 有一个强大的类型推断系统,通常可以自动推断变量的类型。但如果你需要明确指定类型,可以在声明时使用类型注解。
声明类型的字面量
let num1 = 9_i32;
let num2 = num1 + 8_i32;
代码实操
新建项目
cargo new cs01_valuetype
打开main.rs,写入代码
fn main() {
let x = 1;
let y = 3.2;
let z = 'c';
let b = true;
println!("x:{}, y:{}, z:{}, b:{}",x,y,z,b);
print_type_of(&x);
print_type_of(&y);
print_type_of(&z);
print_type_of(&b);
let x1:i8 = 111;
let y1:f32 = 11.2;
println!("x1:{}, y1:{}",x1,y1);
print_type_of(&x1);
print_type_of(&y1);
}
fn print_type_of<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
用cargo执行代码
cd cs01_valuetype
cargo run
运行结果如下
x:1, y:3.2, z:c, b:true
i32
f64
char
bool
x1:111, y1:11.2
i8
f32