Rust变量与可变性 数据类型介绍 标量类型 结语

这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

数据类型介绍

Rust 语言的数据类型可以分成两类,分别是标量类型和复合类型,本文首先介绍标量类型。

Rust 是一门静态的编译型语言,在编译时必须知道所有变量的具体类型,在大部分情况下,基于变量的值,编译器能够推断出变量值的具体类型,但是如果某一个变量对应的值的可能的类型比较多(例如将string 转换成整数的parse方法),就必须为这个变量添加类型标注,否则在编译时就会报错。

1
2
3
4
rust复制代码fn main() {
let a: u32 = "40".parse().expect("not a number"); // 指定a变量的具体类型
// let a = "40".parse().expect("not a number"); 因为字符串40能够解析出来的类型较多,比如i32 u32 i8等,如果不标注a的类型,在编译时就会提示type error的错误
}

标量类型

一个标量类型代表一个单个的值,Rust 有四种主要的标量类型,分别是整数类型、浮点类型、布尔类型、字符类型。

整数类型

整数类型没有效数部分,例如上面例子中的u32 就是一个无符号的整数类型,占据32位的空间,无符号整数类型以u(unsize)开头,有符号整数类型以i(integer)开头,Rust的整数类型列表如下,每种类型都分iu, 有符号的范围是[(−2n−1),(2n−)][(-2^n-1), (2^n-)][(−2n−1),(2n−)], 无符号的范围是[0,2n−1][0, 2^n-1][0,2n−1]。而isizeusize 类型的位数是由程序运行的计算机的架构(arch(architecture))所决定的,如果计算机是64位的,那么就是64位(i64/u64)的,实际上使用这两种类型的场景不多。

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

整数的表述方法有以下几种,十进制、十六进制、八进制、二进制和字节,很显然,有的整数中间存在下划线,这种设计可以可读性。

下述除了byte 类型外,所有的数值都允许使用类型后缀,比如57u8,表示整数57,类型是u8,如果不太清楚使用哪种类型,可以使用Rust 相应的默认类型,整数的默认类型就是i32i32 类型总体上来说速度很快,即使是在64位的系统中。

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

由于不同的整数类型对应的范围不同,因此在开发程序的过程中可能会出现整数溢出的现响,比如说u8 的范围是0-255,如果把一个u8 的变量值设为256,那么可能会出现两种情况:

  • 调试模式下:在调试模式下进行编译,Rust 会检查整数溢出,如果发生溢出,程序在运行时就会panic
  • 发布模式下(–release):在发布模式下进行编译,Rust 不会检查整数溢出,如果发生溢出,Rust 会执行环绕操作,比如u8 类型的变量发生整数溢出时,256会变成0,257会变成1…,但是程序不会panic

浮点类型

Rust 有两种基础的浮点类型,就是含有小数部分的类型,分别是:

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

f64 是默认类型,因为在现代CPU上f64f32的速度差不多,但是精度更高。

1
2
3
4
rust复制代码fn main() {
let a = 3.0; // 此时a是f64
let a: f32 = 3.0; // 此时a是f32
}

数值操作

Rust 的数值操作主要就是加减乘除余,和其他编程语言差不多,但是需要注意的是,浮点型和整数类型之间不能直接进行运算,Rust支持+= -=的操作:

1
2
3
4
5
6
7
rust复制代码fn main() {
let sum = 1 + 2; // 加
let diff = 3 - 2; // 减
let pro = 3 * 2; // 乘
let quo = 3.0 / 1.5; // 除
let rem = 3 % 2; // 取余
}

布尔类型

Rust 和其他编程语言一样,布尔类型用bool 表示,值只能是true 或者 false。占用一个字节位置。

1
2
3
4
rust复制代码fn main() {
let b1 = true;
let b2: bool = flase; // 显示标注类型
}

字符类型

字符型用 char 表示。

Rust*的 *char 类型大小为 4 个字节,代表 Unicode标量值,这意味着它可以支持中文,日文和韩文字符等非英文字符甚至emoji*和零宽度空格在 *Rust 中都是有效的 char 值。

char字面量是单引号包围的任意单个字符,例如'a'、'我'。注意:char和单字符的字符串String是不同的类型。

1
2
3
4
5
6
rust复制代码fn main() {
let a = 'a';
let b = 'あ';
let c = '😂';
let d = "h"; // d的类型是&str
}

结语

文章首发于微信公众号程序媛小庄,同步于掘金

码字不易,转载请说明出处,走过路过的小伙伴们伸出可爱的小指头点个赞再走吧(╹▽╹)

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%