当前位置: 首页>后端>正文

rust学习-1.0-变量和基本类型

在 Rust 中,变量声明与赋值是编程的基础。每个变量都必须先声明,然后才能使用。Rust 是一种静态类型语言,这意味着每个变量都有一个特定的类型,并且在编译时确定。
为什么使用变量?因为需求,譬如有时需要计算0-100的和,有时需要计算0-1000的和,这种情况下,最好用某个字符如count指代要求和的数,看情况给这个count 100或1000的具体值。

变量声明

在 Rust 中,你可以使用 let 关键字来声明一个变量。声明时可以指定类型,也可以让编译器自动推断。

let x: i32 = 5; // 明确指定类型为 i32
let y = 5; // 自动推断为 i32

基本数据类型

Rust 的基本数据类型包括:

  1. 整数(Integers)
    • 有符号整数:i8, i16, i32, i64, i128isize(根据平台可能是 32 位或 64 位)
    • 无符号整数:u8, u16, u32, u64, u128usize(根据平台可能是 32 位或 64 位)
  2. 浮点数(Floating-Point Numbers)
    • f32f64(默认是 f64
  3. 布尔值(Booleans)
    • 类型为 bool,只有两个可能的值:truefalse
  4. 字符(Characters)
    • 类型为 char,用单引号表示,代表一个 Unicode 字符

在Rust编程语言中,关于i8,i32里面数字的解释:

  1. i8 - 这是一个有符号的8位整数类型。这意味着它用来表示范围从 -128127 的整数。
  2. i32 - 这是一个有符号的32位整数类型。它通常用来表示一般的整数,其范围从 -2,147,483,6482,147,483,647
    i8的二进制范围是00000000 到 11111111,每一个01在二进制里叫位。i8在内存里占用了8个二进制的空间。

整数的不同表达形式

在Rust中,你可以使用不同的进制来表示数字。下面是一些基本的方法:

  1. 十进制(Decimal): 这是默认的进制,不需要任何前缀。
    let decimal = 123; // 十进制数123
    
  2. 十六进制(Hexadecimal): 以 0x0X 开头。
    let hex = 0xff; // 十六进制数FF,等于十进制的255
    
  3. 八进制(Octal): 以 0o0O 开头。
    let octal = 0o77; // 八进制数77,等于十进制的63
    
  4. 二进制(Binary): 以 0b0B 开头。
    let binary = 0b1111_0000; // 二进制数11110000,等于十进制的240
    

在Rust中,你可以在数字字面量中使用下划线 _ 来增加可读性,但它不会影响数字的值。例如,0b1111_00000b11110000 是相同的。
请注意,这些进制表示方法仅适用于数字字面量。如果你在代码中需要进行进制转换,可以使用标准库中的 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

https://www.xamrdz.com/backend/3vh1940436.html

相关文章: