- Rust 教程
- Rust - 首页
- Rust - 简介
- Rust - 环境搭建
- Rust - HelloWorld 示例
- Rust - 数据类型
- Rust - 变量
- Rust - 常量
- Rust - 字符串
- Rust - 运算符
- Rust - 决策语句
- Rust - 循环
- Rust - 函数
- Rust - 元组
- Rust - 数组
- Rust - 所有权
- Rust - 借用
- Rust - 切片
- Rust - 结构体
- Rust - 枚举
- Rust - 模块
- Rust - 集合
- Rust - 错误处理
- Rust - 泛型类型
- Rust - 输入输出
- Rust - 文件输入/输出
- Rust - 包管理器
- Rust - 迭代器和闭包
- Rust - 智能指针
- Rust - 并发
- Rust 有用资源
- Rust - 快速指南
- Rust - 有用资源
- Rust - 讨论
Rust - 数据类型
类型系统表示语言支持的不同值类型。在程序存储或操作值之前,类型系统会检查值的有效性。这确保代码按预期运行。类型系统还可以提供更丰富的代码提示和自动化文档。
Rust 是一种静态类型语言。Rust 中的每个值都具有某种数据类型。编译器可以根据分配给变量的值自动推断变量的数据类型。
声明变量
使用let关键字声明变量。
fn main() { let company_string = "TutorialsPoint"; // string type let rating_float = 4.5; // float type let is_growing_boolean = true; // boolean type let icon_char = '♥'; //unicode character type println!("company name is:{}",company_string); println!("company rating on 5 is:{}",rating_float); println!("company is growing :{}",is_growing_boolean); println!("company icon is:{}",icon_char); }
在上面的示例中,变量的数据类型将根据分配给它们的值推断得出。例如,Rust 将字符串数据类型分配给变量company_string,浮点数据类型分配给rating_float等。
println!宏接受两个参数:
- 特殊的语法{ },它是占位符
- 变量名或常量
占位符将被变量的值替换
上述代码片段的输出将是:
company name is: TutorialsPoint company rating on 5 is:4.5 company is growing: true company icon is: ♥
标量类型
标量类型表示单个值。例如,10、3.14、'c'。Rust 有四种主要的标量类型。
- 整数
- 浮点数
- 布尔值
- 字符
我们将在后续章节中学习每种类型。
整数
整数是没有小数部分的数字。简单来说,整数数据类型用于表示整数。
整数可以进一步分类为有符号和无符号整数。有符号整数可以存储负值和正值。无符号整数只能存储正值。下面是整数类型的详细描述:
序号 | 大小 | 有符号 | 无符号 |
---|---|---|---|
1 | 8 位 | i8 | u8 |
2 | 16 位 | i16 | u16 |
3 | 32 位 | i32 | u32 |
4 | 64 位 | i64 | u64 |
5 | 128 位 | i128 | u128 |
6 | 架构相关 | isize | usize |
整数的大小可以是架构相关的。这意味着数据类型的大小将从机器的架构派生。大小为架构相关的整数在 x86 机器上为 32 位,在 x64 机器上为 64 位。架构相关的整数主要用于索引某种集合。
示例
fn main() { let result = 10; // i32 by default let age:u32 = 20; let sum:i32 = 5-15; let mark:isize = 10; let count:usize = 30; println!("result value is {}",result); println!("sum is {} and age is {}",sum,age); println!("mark is {} and count is {}",mark,count); }
输出如下:
result value is 10 sum is -10 and age is 20 mark is 10 and count is 30
如果你将age的值替换为浮点数,上面的代码将返回编译错误。
整数范围
每个有符号变体可以存储从-(2^(n-1)) 到 2^(n-1) -1的数字,其中 n 是该变体使用的位数。例如,i8 可以存储从-(2^7) 到 2^7 -1的数字——这里我们将n替换为 8。
每个无符号变体可以存储从0到(2^n)-1的数字。例如,u8 可以存储从0到(2^8)-1的数字,即 0 到 255。
整数溢出
当分配给整数变量的值超过 Rust 为该数据类型定义的范围时,就会发生整数溢出。让我们用一个例子来理解这一点:
fn main() { let age:u8 = 255; // 0 to 255 only allowed for u8 let weight:u8 = 256; //overflow value is 0 let height:u8 = 257; //overflow value is 1 let score:u8 = 258; //overflow value is 2 println!("age is {} ",age); println!("weight is {}",weight); println!("height is {}",height); println!("score is {}",score); }
无符号 u8 变量的有效范围是 0 到 255。在上面的示例中,变量被赋值大于 255(Rust 中整数变量的上限)的值。执行时,上述代码将返回警告:警告 - u8 超出范围的字面量(针对 weight、height 和 score 变量)。超过 255 的溢出值将从 0、1、2 等开始。最终的输出(不含警告)如下所示:
age is 255 weight is 0 height is 1 score is 2
浮点数
Rust 中的浮点数据类型可以分类为f32和f64。f32 类型是单精度浮点数,f64 是双精度浮点数。默认类型是 f64。考虑以下示例以了解有关浮点数据类型的更多信息。
fn main() { let result = 10.00; //f64 by default let interest:f32 = 8.35; let cost:f64 = 15000.600; //double precision println!("result value is {}",result); println!("interest is {}",interest); println!("cost is {}",cost); }
输出如下所示:
interest is 8.35 cost is 15000.6
自动类型转换
Rust 不允许自动类型转换。考虑以下代码片段。整数的值被赋值给浮点变量interest。
fn main() { let interest:f32 = 8; // integer assigned to float variable println!("interest is {}",interest); }
编译器会抛出一个如下所示的类型不匹配错误。
error[E0308]: mismatched types --> main.rs:2:22 | 2 | let interest:f32=8; | ^ expected f32, found integral variable | = note: expected type `f32` found type `{integer}` error: aborting due to previous error(s)
数字分隔符
为了方便阅读大数字,我们可以使用视觉分隔符 _ 下划线来分隔数字。也就是说,50,000 可以写成 50_000。这在下面的示例中显示。
fn main() { let float_with_separator = 11_000.555_001; println!("float value {}",float_with_separator); let int_with_separator = 50_000; println!("int value {}",int_with_separator); }
输出如下所示:
float value 11000.555001 int value 50000
布尔值
布尔类型有两个可能的值——true或false。使用bool关键字声明布尔变量。
示例
fn main() { let isfun:bool = true; println!("Is Rust Programming Fun ? {}",isfun); }
上述代码的输出将是:
Is Rust Programming Fun ? true
字符
Rust 中的字符数据类型支持数字、字母、Unicode 和特殊字符。使用char关键字声明字符数据类型的变量。Rust 的 char 类型表示 Unicode 标量值,这意味着它可以表示的远不止 ASCII 字符。Unicode 标量值的范围是从U+0000到U+D7FF和U+E000到U+10FFFF(包含)。
让我们考虑一个例子来了解有关字符数据类型的更多信息。
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); }
上述代码的输出将是:
special character is @ alphabet is A emoji is 😁