类型系统 对于任何一门语言都是重中之重,因为它体现了语言所支持的不同类型的值。
类型系统 也是 IT 初学者最难啃的三座大山之一,而类型系统之所以难以理解,主要是没有合适的现成的参考体系。
我们说类型系统 存在的目的,就是 程序在存储或操作某个数之前检查这个数的有效性,这可以保证程序运行时给变量提供的数据不会发生类型错误。
更近一步说,类型系统可以允许编辑器时时报告错误或者自动提示。
Rust 是一个静态的严格数据类型的语言。每个值都有唯一的数据类型,要么是整型,要么是浮点型等等。
标量数据类型
标量数据类型 又称为 基本数据类型。标量数据类型只能存储单个值,例如 10 或 3.14 或 c。
Rust 语言中有四种标量数据类型:
- 整型
- 浮点型
- 布尔类型
- 字符类型
接下来我们会对每种标量数据类型做一个简单的介绍。
整数型(Integer)
整数型简称整型,就是没有小数点的数字,按照比特位长度和有无符号分为以下种类:
位长度 | 有符号 | 无符号 |
---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
128-bit | i128 | u128 |
arch | isize | usize |
isize 和 usize 两种整数类型是用来衡量数据大小的,它们的位长度取决于所运行的目标平台(CPU架构),如果是 32 位架构的处理器(x86)将使用 32 位位长度整型,在x64机器为64位长度整型。
整数的表述方法有以下几种:
进制 | 例 |
---|---|
十进制 | 98_321、 98321 |
十六进制 | 0xff |
八进制 | 0o77 |
二进制 | 0b1111_0000 |
字节(只能表示 u8 型) | b’A’ |
有的整数中间存在一个下划线,这种设计可以让人们在输入一个很大的数字时更容易判断数字的值大概是多少,Rust 语言会在编译时移除数字可读性分隔符 _。
浮点数型(Floating-Point)
Rust 与其它语言一样支持 32 位浮点数(f32)和 64 位浮点数(f64)。默认为 64 位浮点数,因为现代计算机处理器对两种浮点数计算的速度几乎相同,但 64 位浮点数精度更高。
实例
fn main() {
let x = 64.0; // f64
let y: f32 = 32.0; // f32
}
数学运算
用一段程序反映数学运算:
实例
fn main() {
let sum = 5 + 10; // 加
let difference = 84.5 - 6.3; // 减
let product = 3 * 30; // 乘
let quotient = 56.7 / 32.1; // 除
let remainder = 76 % 5; // 求余
println!("sum = {}", sum);
println!("difference = {}", difference);
println!("product = {}", product);
println!("quotient = {}", quotient);
println!("remainder = {}", remainder);
}
结果
许多运算符号之后加上 = 号是自运算的意思,例如:
sum += 1 等同于 sum = sum + 1。
注意:Rust 不支持 ++ 和 –,因为这两个运算符出现在变量的前后会影响代码可读性,减弱了开发者对变量改变的意识能力。
布尔型
布尔型用 bool 表示,值只能为 true 或 false。
字符型 char
字符 ,简单的来说,就是字符串的基本组成部分,也就是单个字符或字。
与 C / C++ 不同的是:Rust 使用 UTF-8 作为底层的编码 ,而不是常见的使用 ASCII 作为底层编码。
也就是说,Rust 中的 字符数据类型 包含了 数字、字母、Unicode 和 其它特殊字符。
Rust的 char 类型大小为 4 个字节,代表 Unicode标量值,这意味着它可以支持中文,日文和韩文字符等非英文字符甚至表情符号和零宽度空格在 Rust 中都是有效的 char 值。
Unicode 编码的标量值的范围从 U+0000 到 U+D7FF, U+E000 到 U+10FFFF(含)。
注意:由于中文文字编码有两种(GBK 和 UTF-8),所以编程中使用中文字符串有可能导致乱码的出现,这是因为源程序与命令行的文字编码不一致,所以在 Rust 中字符串和字符都必须使用 UTF-8 编码,否则编译器会报错。
实例
fn main() {
let special_character = '@'; //default
let alphabet:char = 'A';
let emoji:char = '😻'; // 笑脸的那个图
println!("special character is {}",special_character);
println!("alphabet is {}",alphabet);
println!("emoji is {}",emoji);
}
结果