3.Rust数据类型

Rust数据类型

Rust 每个值都有其确切的数据类型,总的来说可以分为两类:基本类型和复合类型。

基本数据类型

Rust是一个强类型语言与js不同,我们在声明变量时就要指定该变量的类型,编译器必须在编译期知道我们所有变量的类型。当然大多时聪明的编译器可以自动推导类型,但为了保证代码质量和可读性建议还是定义好类型。

基本类型意味着它们往往是一个最小化原子类型,无法解构为其它类型(一般意义上来说),基本数据类型由以下组成:

  • 数值类型: 有符号整数 (i8, i16, i32, i64, isize)、 无符号整数 (u8, u16, u32, u64, usize) 、浮点数 (f32, f64)、以及有理数、复数
  • 字符串:字符串字面量和字符串切片 &str
  • 布尔类型: true和false
  • 字符类型: 表示单个 Unicode 字符,存储为 4 个字节
  • 单元类型: 即 () ,其唯一的值也是 ()

整数类型

整数是没有小数部分的数字。之前使用过的 i32 类型,表示有符号的 32 位整数( i 是英文单词 integer 的首字母,与之相反的是 u,代表无符号 unsigned 类型)。下表显示了 Rust 中的内置的整数类型:

长度 有符号类型 无符号类型
8位 i18 u8
16位 i16 u16
32位 i32 u32
64位 i64 u64
128位 i128 u128
视计算机CPU类型而定 isize usize

isize 和 usize 的主要应用场景是用作集合的索引。
整形字面量可以用下表的形式书写:

数字字面量 示例
十进制 98_222
十六进制 0xff
八进制 0o77
二进制 0b1111_0000
字节 (仅限于 u8) b'A'

对于整形来说,Rust默认使用i32类型,例如let num = 11num的类型为i32

浮点类型

浮点类型数字 是带有小数点的数字,在 Rust 中浮点类型数字也有两种基本类型: f32f64,分别为 32 位和 64 位大小。默认浮点类型是 f64,在现代的 CPU 中它的速度与 f32 几乎相同,但精度更高。
示例

rust 复制代码
fn main() {
    let x = 5.0; // f64

    let y: f32 = 1.0; // f32
}

序列

Rust 提供了一个非常简洁的方式,用来生成连续的数值,例如 1...6,生成从 1 到 4 的连续数字,不包含 6 ;1...=6,生成从 1 到 5 的连续数字,包含 6,它的用途很简单,常常用于循环中:

rust 复制代码
for i in 1..=6 {
    println!("{}",i);
}

序列只允许用于数字或字符类型,原因是:它们可以连续,同时编译器在编译期可以检查该序列是否为空,字符和数字值是 Rust 中仅有的可以用于判断是否为空的类型。如下是一个使用字符类型序列的例子:

字符类型

字符可以把它理解为英文中的字母,中文中的汉字。Rust 的字符不仅仅是 ASCII,所有的 Unicode 值都可以作为 Rust 字符,包括单个的中文、日文、韩文、emoji 表情符号等等,都是合法的字符类型。关于Unicode参考文章

由于 Unicode 都是 4 个字节编码,因此字符类型也是占用 4 个字节:
Rust 的字符只能用 '' 来表示, "" 是留给字符串的。

rust 复制代码
fn main() {
    let x = '余';
    println!("{}",std::mem::size_of_val(&x)); // 4 
}

bool类型

Rust 中的布尔类型有两个可能的值:true false,布尔值占用内存的大小为 1 个字节:

fn main() {

let ok = true;

复制代码
let pass: bool = false; // 使用类型标注,显式指定f的类型

if ok{
  //.....
}

}

使用布尔类型的场景主要在于流程控制.

单元类型

单元类型可以理解为一个站位的类型。什么意思?main函数大家都知道,这个函数返回什么呢?这种没有实际返回值的函数在Rust中称为"发散函数",例如println!()也是一样。

相关推荐
Source.Liu2 分钟前
【Dioxus】Windows 环境下 Rust + Dioxus 安装配置笔记
windows·rust·dioxus
郑州光合科技余经理5 分钟前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
IT_陈寒8 分钟前
Vue的嵌套组件竟然吃掉了我的事件?
前端·人工智能·后端
来了就未晚29 分钟前
Python基础 学习代码存储与命名规范
开发语言·python·学习
布莱克6051 小时前
数组详解:定义、作用、应用场景及与链表的区别(C/C++ 代码讲解)
c语言·开发语言·c++·数组
hongmai6668881 小时前
MP2348GTL-Z:这颗24V/4A同步降压芯片,把性能和体积平衡得恰到好处
c语言·开发语言·arm开发·单片机·5g
多弗朗皮卡丘1 小时前
C语言梦开始的地方19:文件操作
c语言·开发语言
Dovis(誓平步青云)1 小时前
折叠屏悬停看视频,上半屏和下半屏应该各做什么
android·java·服务器·开发语言·安全·音视频
大辉狼_音频架构1 小时前
进阶:从源码编译 SOF 固件与 topology
后端
大辉狼_音频架构1 小时前
上板:让 SOF 在 FRDM-i.MX8MP 上跑起来
后端