RUST|RUST 学习日记 第6课 ——基本数据类型
RUST 学习日记 第6课 ——基本数据类型
文章图片
0x00 回顾 上一节讲解了变量和常量,主要了解了他们的区别。也初步感觉到在Rust中对安全性。这节咱们讲解常用的一些基本数据类型。数据类型是Rust作为强类型的静态编译语言的基础。Rust常见的基本数据类型有整数类型,浮点数类型,字符类型,布尔类型等。
0x01 整数类型(Integer) 下表是Rust中常见的整型:
长度 | 有符号 | 无符号 |
---|---|---|
8-bit | i8 |
u8 |
16-bit | i16 |
u16 |
32-bit | i32 |
u32 |
64-bit | i64 |
u64 |
128-bit | i128 |
u128 |
arch | isize |
usize |
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各数据类型之间不能隐式的相互转换。但是它们之间依然是可以相互转换的,需要用到其它方法,下节也会介绍。感兴趣的可以提前查下资料哦~
0x06 本节源码 【RUST|RUST 学习日记 第6课 ——基本数据类型】 006/data_type · StudyRust - 码云 - 开源中国 (gitee.com)
下节预告——了解字面量和常用的运算符,学会使用Rust来做一些简单的运算。
推荐阅读
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 2019年12月24日
- 由浅入深理解AOP
- 2019.4.18感恩日记
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 亲子日记第186篇,2018、7、26、星期四、晴
- 2019.4.2咖啡冥想日记
- 亲子日记(287)2019.4.27.
- 一起来学习C语言的字符串转换函数