Rust 基本数据类型

Rust 是一个静态的严格数据类型的语言,每个数值都有唯一的数据类型。

Rust 语言在赋值时并不强制要求指定变量的数据类型,Rust 编译器可以根据分配给它的值自动推断变量的数据类型。

Rust 语言基本数据类型包括布尔型、字符型、整数型 和 浮点型。

1. 声明和定义变量

Rust 语言使用 let 关键字来声明和定义一个变量。

1)Rust 语言中声明变量的语法

let variable_name = value;

2) Rust 语言中声明变量的范例

fn main() {
    let company_string = "TutorialsPoint";  // string 字符串类型
    let rating_float = 4.5;                 // float 类型
    let is_growing_boolean = true;          // boolean 类型
    let icon_char = '♥';                    //unicode character 类型

    println!("company name is:{}",company_string);
    println!("company rating on 5 is:{}",rating_float);
    println!("company is growing :{}",is_growing_boolean);
    println!("company icon is:{}",icon_char);
}

运行结果:

company name is:TutorialsPoint
company rating on 5 is:4.5
company is growing :true
company icon is:♥

2. 布尔型

Rust 使用 bool 表示布尔数据类型,布尔型共有两个值 true 和 false。

Rust 声明布尔型变量的范例:

fn main() {
    let t = true;
    let f: bool = false;

    println!("t is {} and f is {}", t, f);
}

运行结果:

t is true and f is false

3. 字符型

字符是指单个字符或字,是字符串的基本组成部分。Rust 使用 char 表示字符数据类型,代表单个 Unicode 字符,大小为 4 个字节。

Unicode 值的范围从 U+0000 到 U+D7FF 和 U+E000 到 U+10FFFF(包括两端)。

由于中文编码有两种(GBK 和 UTF-8),所以代码中使用中文字符串有可能导致乱码的出现,这是因为源程序与命令行的文字编码不一致,所以在 Rust 中字符串和字符都必须使用 UTF-8 编码,否则编译器会报错。

Rust 声明字符型变量的范例:

fn main() {
    let special_character = '@'; 
    let alphabet:char = 'A';
    
    println!("special_character is {}", special_character);
    println!("alphabet is {}", alphabet);
}

运行结果:

special_character is @
alphabet is A

4. 整数型

整数型简称整型,指没有小数点的数字,比如 0,1,-1,-2,9999999 等,而 0.0 、1.0 和 -1.11 等都不是整数。

整型按照存储长度和有无符号分为以下几类:

位长度 有符号 无符号
8-bit i8 u8
16-bit i16 u16
32-bit i32 u32
64-bit i64 u64
128-bit i128 u128
arch isize usize

整型有一种特殊类型 arch,它是由 CPU 架构决定的大小的整型类型,在 x86 机器上为 32 位,在 x64 机器上为 64 位。

整数的表述方法有以下几种:

进制 范例
十进制 98
十六进制 0xff
八进制 0o77
二进制 0b1111_0000
字节(只能表示 u8 型) b'A'

Rust 声明整型变量的范例:

fn main() {
    // 默认 i32 
    let result = 10;   

    // 无符号 32 位整形
    let age:u32 = 20;   

    // 下划线可以省略,分割是为了增强可读性
    let bignum:i64 = 98_5688;

    // 由系统架构决定 32 位 或者 64 位有符号整形
    let mark:isize = 10;

    println!("result is {}", result);
    println!("age is {}", age);
    println!("bignum is {}", bignum);
    println!("mark is {}", mark);
}

运行结果:

result is 10
age is 20
bignum is 985688
mark is 10

以上案例说明:

  • 不显示声明整数类型,默认数据类型为 i32。
  • 整数中间可以用下划线连接,可以忽略,目的是增强可读性,就像科学记数法中的逗号。
  • isize 和 usize 由当前系统的架构决定长度。

5. 浮点数型

浮点型就是带有小数点的数字。Rust 区分整型和浮点型的唯一指标就是有没有小数点。

Rust 中的整型和浮点型是严格区分的,不能相互转换。也就是说,我们不能将 0.0 赋值给任意一个整型,也不能将 0 赋值给任意一个浮点型。

按照存储大小,我们把浮点型划分为 f32 和 f64。其中 f64 是默认的浮点类型。

  • f32 又称为 单精度浮点型。
  • f64 又称为 双精度浮点型,它是 Rust 默认的浮点类型。

Rust 声明整型变量的范例:

fn main() {
    // 默认是 f64 
    let result = 10.00;        
      
    // 单精度浮点型 
    let interest:f32 = 8.35;

    // 双精度浮点型
    let cost:f64 = 15000.600; 

    println!("result is {}", result);
    println!("interest is {}", interest);
    println!("cost is {}", cost);
}

运行结果:

result is 10
interest is 8.35
cost is 15000.6

6. 不允许类型自动转换

Rust 中的数字类型与 C/C++ 中不同的是 Rust 语言不允许类型自动转换。

例如,把一个 整型 赋值给一个 浮点型 是会报错的。

不允许类型自动转换的范例:

fn main() {
   let interest:f32 = 8;   // integer assigned to float variable
   println!("interest is {}",interest);
}

编译上面的代码,会抛出 mismatched types error 错误。

error[E0308]: mismatched types
   --> main.rs:2:22
   |
 2 | let interest:f32=8;
   |    ^ expected f32, found integral variable
   |
   = note: expected type `f32`
      found type `{integer}`
error: aborting due to previous error(s)

7. 数字可读性分隔符 _

为了方便阅读超大的数字,Rust 语言允许使用一个 虚拟的分隔符 也就是 下划线( _ ) 来对数字进行可读性分隔符。

比如为了提高 50000 的可读性,我们可以写成 50_000 。

Rust 语言会在编译时移除数字可读性分隔符 _。

分隔符 _ 范例:

我们写几个例子来演示下 数字分隔符,从结果中可以看出,分隔符对数字没有造成任何影响。

fn main() {
   let float_with_separator = 11_000.555_001;
   println!("float value {}",float_with_separator);

   let int_with_separator = 50_000;
   println!("int value {}",int_with_separator);
}

编译运行上面的代码,输出结果如下:

float value 11000.555001
int value 50000

下一章:Rust 变量

变量是在编程语言中通过名字可以访问的一块内存空间,里面存储的数据可以在程序运行时修改。Rust 语言变量的命名规则:Rust 中的变量名中可以包含 字母、数字 和 下划线。变量名必须以 字母 或 下划线 开头。变量名是 区分大小 写的。Rust 语言变量的声明语法:Rust 语言中声明变量时的数据类型是可选的,也就是可以忽略的。