2.Rust新手教程-数据类型

学习笔记,仅此而已

Rust是静态编译语言,在编译时必须知道所有变量的类型,其中Rust内部有2套机制

  • 基于定义的变量值,编译器自己推断其类型,类似Typescript.
  • 但是如果可能的类型比较多(例如把String转为整数的parse方法),就必须提添加类型标注,否则编译报错。
fn main() {
    let value = "110";  默认是&str类型,不需要声明类型
    let new_se: u32 = value.parse().expect("error"); 存在多种可能,必须声明类型
    println!("count value is {}", new_se);
}

Rust数据类型-标量类型

标量类型代表一个单一的值。Rust标量类型分为

  • 整数类型
  • 浮点类型
  • 布尔类型
  • 字符类型

一、整数类型

整数类型分为无符号整数(以 i 开头)和有符号整数(以 u 开头),例如 u32表示一个无符号整数类型,占据32位空间。

1.1整数类型细分

有符号整数类型:即带正负单位的数据类型,其中细分类型有i8、i6、i32、i64、i128
无符号整数类型:即不带正负号的数据,即只会大于0,细分类型有u8、u16、u32、u64、u128

image.png

其中符号后面跟的数字表示其占多少位空间,也标识其取值的范围,例如
u8类型,其范围为:0到2的8次方-1,即0~255
i8类型,其范围为:-255~255

注意点:整数类型默认为i32类型

整数类型的值,可以使用下划线增加可读性,比如:let count = 100_0000 表示100万的数值

1.2整数溢出

假如:定义u8类型是整数,但是值给了266,超过u8类型的最大范围255,那么

  • 在开发模式下,Rust会检查出整数溢出,程序会报错
  • 生产版本下,Rust不会检查整数溢出,如果发生溢出,其会指向环绕操作
    • 256回变成0,257变成1,以此类推。
    • 程序不会报错

二、浮点类型

Rust有2种基础的浮点类型

  • f32,32位,单精度
  • f64,64位,双精度

Rust默认使用f64类型.

Rust数值操作

Rust针对数值类型的数据,支持:

  • 加减乘除余
fn main() {
    let sum = 1+1;
    let sum = 1.1-1.1;
    let sum = 2.1*1.1;
    let sum = 2/1;
    let sum = 2%1;
    println!("count value is {}", sum);
}

三、布尔类型

Rust布尔类型有2个值:true和false,占一个字节大小,类型符号是bool、

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

四、字符类型

Rust的的标量类型的字符类型为char类型,

  • 字符类型的值使用单引号
  • 占用4个字节大小
  • 支持拼音、中日韩文、emoji表情
fn main() {
    let f =‘s’;
    let p:char ='a';
    let p:char ='';
}

这里指的是单一值,即char类型的值只有一个,比如‘s’,多个字符不能使用char类型。

Rust数据类型-复合类型

复合类型即可以将多个值放到一个值里面。Rust复合类型分为2种:

Tuple 元组

  • 可以存放多种数据类型
  • 长度是固定的,一旦声明就无法改变

Tuple的创建,可以显示的声明类型,也可以省略。

let tup = (1,2,3,4.1)

Tuple值的获取,可以使用解构,也可以使用点访问下标的方式

let tup = (1,2,3,4.1)
let (x,y,z) = tup; 使用解构方式
let s = tup.0; 使用访问下标的方式

数组

  • 只能存放单一数据类型
  • 长度是固定的,一旦声明就无法改变
  • 数组是存在栈内存中的

数组的创建,可以显示的声明类型,也可以省略。

 let a = [1,2,3]; rust推断为[i32;3]

数组类型的声明使用:[类型;长度]

let a: [u8; 3] = [1, 2, 3];

针对数组内容一样的情况,可以简写

let a = [3;5];  相当于 let a = [3,3,3,3,3]

数组值的获取,可以使用访问下标的方式

 let a = [0,1,2,3];
 let x = a[0];  0
 let y = a[1];  1

注意的是:对于数组索引取值超过最大值时,Rust编译会通过,但是会在运行时报错。

数组值的获取,也可以使用解构,如果数组内容多,你只想取前几个元素,后面可以写..语法

 let a = [0,1,2,3];
 let [x, y, ..] = a;  只解构出第一个元素和第二个元素

你可能感兴趣的:(2.Rust新手教程-数据类型)