Rust语言入门教程(四) - 标量数据类型

news/2024/7/3 2:18:13

标量类型(Scalar Types)

在Rust中,一共有4中标量类型, 也就是基本数据类型,分别是:

  • 整型(Integers)
  • 浮点型(Floats)
  • 布尔型(Boolean)
  • 字符型(Characters)

整型

无符号整型(Unsigned)有符号整型(Signed)
u8i8
u16i16
u32i32
u64i64
u128i128
usizeisize

其中分为无符号整型(以u开头),和有符号整型(以i开头),后面的数据代表该类型在内存中占多少bits. 其中usize类型是个例外,usize 类型的位数取决于目标平台的架构:

  • 在 32 位架构上,usize 是 32 位的。
  • 在 64 位架构上,usize 是 64 位的。

usize 类型通常用于索引集合和与内存大小相关的操作,其大小与平台的内存寻址能力相匹配,确保在任何平台上都能高效地进行这些操作。例如可以用于arrayvector的索引的类型。isizeusize类似,只不过它是有符号的而已。

如果在声明一个整型变量时没有显式的标准类型的话,整型变量默认会被Rust识别为i32类型,因为这个类型的性能通常是最好的,即使是在64位的系统上也是如此。

需要注意的是,虽然Rust有这些整型,但根据你的系统位数不同,有的整型类型可能不被支持,比如在一个16-bit的系统中,就只支持16位及以下的整型类型(u8,i8, u16,i16)和usize, isize.

整型与进制

进制写法示例说明
十进制(Decimal)100000直接以数字开头
十六进制(Hex)0xdeadbeef0x开头的数字会被识别为16进制
八进制(Octal)0o775432110o开头的数字会被识别为8进制
二进制(Binary)0b111100110b开头的数字会被识别为二进制
字节(byte)b’A’用b开头,单引号内为一个ASCII码范围内的字符,因此byte类型在Rust中跟u8类型是等价的,因为他们都是0-255之间的数字

Rust会自动忽略在数字中出现的_, 因此可以在数字中间任意位置加上_以方便我们阅读代码,例如:

进制写法示例加下划线写法
十进制(Decimal)100000100_000
十六进制(Hex)0xdeadbeef0xde_ad_be_ef
八进制(Octal)0o775432110o7754_3211
二进制(Binary)0b111100110b1_1_1_1_0_0_1_1

浮点型

浮点类型比整型简单许多,只有两种类型:

  • f32
  • f64
    他们之间的区别就是精度上的不同,默认情况下浮点数的类型是f64, 但是如果你的操作系统位数是低于64位的, f64的性能就会很差,这是需要注意的一点。

浮点类型的格式遵循IEEE-754标准规范,由整数位,小数点和小数位组成,如:

3.1415926   // legal
.1			// illegal, 必须有整数位
0.1			// legal

数字类型的声明方法

在定义一个数字类型的变量时, 有两种标注类型的方法。 第一种与我们之前介绍变量声明的章节中一样:

let x: u16 = 5;
let y: f32 = 3.14;

第二种方法,也可以将类型作为后缀,放在值的后面,如下:

let x = 5u16;
let y = 3.14f32;

为了方便阅读,也可以像在上一节中所说的一样,在数字中加上_, 如下:

let x = 5_u16;
let y = 3.14_f32;

这种方法在我们需要给一些泛型函数传递指定类型的参数时很有帮助, 比如一个函数有一个参数x, 这个参数x的类型可以是u16 , 也可以是u32, 根据参数的类型不同,函数的行为会发生变化, 此时如果我需要传入的参数值为5, 那么我就需要为这个5指定类型,那么便可以写为5u16 或者 5u32

布尔型

布尔型只有两个可能的值:

  • true
  • false

注意都是小写。 可以如下定义一个布尔型变量:

let b: bool = true;
let c = false;

布尔型不是数字,因此不可以用于数学计算,除非用as关键词把它转换,例如:

fn main(){
	let x = 10 - true;
	println!("{}", x);
}

这样是会报错的, 但是改成下面这样就不会了:

fn main(){
	let x = 10 - true as u8;
	println!("{}", x);
}

上面的代码中true as u8会把布尔型转换成整型(1u8),因此最终程序输出的结果是9

字符型

char这个类型的命名并不准确,每个char类型的变量应该都是一个标准的unicode值, 例如下面的值都是合法的:

let my_letter = 'a';
let i_kratkoa = 'й' ;
let ideograph = '你';
let my_fire = '🔥'

如上, 一个char变量的值可能是一个英文字母,也可能是一个其他语言中的字母,也可能是一个汉字, 甚至可以是一个表情符号,还可能是一些不可打印的控制符号,只要它是在unicode可以表示的范围内,一个char类型的变量占4 bytes的空间。

其他语言中, string一般都是由char组成的, 但是在Rust中却不是。Rust中的String中的元素是UTF-8格式的,而char类型不是, 因此String并没有用到char类型。

我们的代码编辑器显示的源代码也是UTF-8格式的,因此,我们在代码中看到的一个字符,其实并不等同于Rust中的一个char

小结

本章主要介绍了Rust的四种标量类型的使用方法与注意事项,下一章将介绍Rust中的复合数据类型。


http://lihuaxi.xjx100.cn/news/1827108.html

相关文章

基于C#实现并查集

一、场景 有时候我们会遇到这样的场景,比如:M{1,4,6,8},N{2,4,5,7},我的需求就是判断{1,2}是否属于同一个集合,当然实现方法有很多,一般情况下,普通青年会做出 O(MN)的复杂度,那么有没有更轻量级的复杂度呢…

拼多多平台全面API接口对接

对接流程(支持虚拟商品) 拼多多与商家之间数据双向请求,同步更新及相关数据传输。对接主要分为三大部分:准备阶段、对接测试、上线使用;针对每部分具体说明如下: 接口连通性测试重点关注两类接口的连通性&a…

基于Vue+SpringBoot的个人健康管理系统

项目编号: S 040 ,文末获取源码。 \color{red}{项目编号:S040,文末获取源码。} 项目编号:S040,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健…

前端 HTML 和 JavaScript 的基础知识有哪些?

前端开发是Web开发的一个重要领域,涉及到HTML(Hypertext Markup Language)和JavaScript两个主要的技术。HTML用于定义网页的结构和内容,而JavaScript用于实现网页的交互和动态效果。以下是前端HTML和JavaScript的基础知识&#xf…

Sublime Text 4168最新代码编辑

Sublime Text是一款功能强大的文本编辑器,具有以下主要功能: 支持多种编程语言的语法高亮和代码自动完成功能,包括Python、JavaScript、HTML、CSS等。提供代码片段(Snippet)功能,可以将常用的代码片段保存…

RK3568 支持4x4矩阵键盘

在对应的设备树添加: keypad {compatible = "gpio-matrix-keypad";pinctrl-names = "default";pinctrl-0 = <&GPIO3_A1_pin&GPIO1_D3_pin&GPIO1_D4_pin&GPIO1_C7_pin&GPIO1_D2_pin&GPIO1_D1_pin&GPIO1_D0_pin&GPIO3_A…

OpenAI研发神秘“Q*”模型:科学家认输,AI赢了人类关键一战

图片来源&#xff1a;视觉中国 作者丨叶蓁 编辑丨康晓 出品丨深网腾讯新闻小满工作室 在山姆奥特曼&#xff08;Sam Altman&#xff09;被OpenAI前董事会突然罢免之前&#xff0c;数位研究人员向董事会发送了一封信&#xff0c;警告称他们发现了一种能够威胁到人类的强大人工…

Ubuntu18.4中安装wkhtmltopdf + Odoo16配置【二】

deepin Linux 安装wkhtmltopdf 1、先从官网的链接里下载linux对应的包 wkhtmltopdf/wkhtmltopdf 下载需要的版本&#xff0c;推荐版本&#xff0c;新测有效&#xff1a; wkhtmltox-0.12.4_linux-generic-amd64.tar.xz 2、解压下载的文件 解压后会有一个wkhtmltox文件夹 3…