0x00 回顾
上一节讲解了变量和常量,主要了解了他们的区别。也初步感觉到在Rust中对安全性。这节咱们讲解常用的一些基本数据类型。数据类型是Rust作为强类型的静态编译语言的基础。Rust常见的基本数据类型有整数类型,浮点数类型,字符类型,布尔类型等。
0x01 整数类型(Integer)
下表是Rust中常见的整型:
每一个变体都存在有符号和无符号两种数据,其中i
(signed int的缩写)表示有符号,u
(unsigned int的缩写)表示无符号。每一个有符号的变体可以储存包含从 -(2n - 1) 到 2n - 1 - 1 在内的数字,这里 n 是变体使用的位数。所以 i8
可以储存从 -(27) 到 27 - 1 在内的数字,也就是从 -128 到 127。无符号的变体可以储存从 0 到 2n - 1 的数字,所以 u8
可以储存从 0 到 28 - 1 的数字,也就是从 0 到 255。另外,isize
和 usize
类型依赖运行程序的计算机架构:64 位架构上它们是 64 位的, 32 位架构上它们是 32 位的。
示例代码如下:
// 默认 i32 类型 let a = 20; // 声明无符号整数 类型声明 let b: u32 = 300; // 后缀声明 let c = 4000u32;
整型溢出(Integer Overflow)
let mut d : i8 = 127; d = 128;
可变变量d
是一个 i8
类型的整数,它的取值范围是 [-128,127]
。那么当你将其修改为 128
时会发生什么呢?尝试编译下,会发现报下面的错误。
这被称为 整型溢出。当Rust在编译时,Rust会检查这类问题并使程序 Panic, Panic这个术语被 Rust 用来表明程序因错误而退出。关于Panic
会在后续章节介绍。在这里先了解即可。
0x02 浮点数(Float)
说白了浮点数就是通常我们所说的小数,如:1.9
,-99.99
等。浮点数又分为f32
和f64
两种类型。
f32
又称为 单精度浮点型。小数点后至少有6位有效数字。f64
又称为 双精度浮点型,如果声明变量时不指定类型, 则是Rust 默认的浮点类型。小数点后至少有15位有效数字。
示例代码如下:
// 默认类型 let f1 = 0.0; // 类型声明 let f2: f32 = 54.0; // 后缀声明 let f3 = 99.999f32;
Rust中定义浮点数时必须存在小数点,它也是区分整型和浮点数的唯一标准,不得将整型赋值给浮点数。如下图,编译器会提示错误,编译也不会通过。
0x03 布尔型(Bool)
哈哈,这个很简单了。就俩值,不是true
就是false
。一般用于逻辑判断中。示例代码如下:
// 默认不声明类型 let g = true; // 声明类型 let h : bool = false;
0x04 字符类型(Char)
Rust的底层编码是UTF-8
,与常见的C,C++,Java
等语言使用ASCII
编码不同。Rust 中的 字符数据类型 包含了 数字、字母、Unicode 和 其它特殊字符。其每个字符占4个字节,由单引号来定义。字符类型代表的是一个Unicode标量值(Unicode Scalar Value)。Unicode 编码的标量值的范围从 U+0000
到 U+D7AF
(包含), U+E000
到 U+10FFFF
(包含),了解更多关于Unicode的信息请前往百度百科。
示例代码如下:
// 默认不声明类型 let i = 'i'; // 声明类型 let j: char = 'j'; // emoji表情 let k = ''; // 汉字 let l = '中'; // 藏文 let m = 'ག';
0x05 小结
本节了解了Rust的常见数据类型,有整数型,浮点型,布尔型,字符型。得知Rust各数据类型之间不能隐式的相互转换。但是它们之间依然是可以相互转换的,需要用到其它方法,下节也会介绍。感兴趣的可以提前查下资料哦~