【Rust自学】3.2. 数据类型:标量类型

news/2024/12/18 20:57:19/

3.2.0. 写在正文之前

欢迎来到Rust自学的第三章,一共有6个小节,分别是:

  • 变量与可变性
  • 数据类型:标量类型(本文)
  • 数据类型:复合类型
  • 函数和注释
  • 控制流:if else
  • 控制流:循环

通过第二章的小游戏(没看的初学者强烈建议看一下),相信你已经学会了基本的Rust语法,而在第三章我们将更深一层,了解Rust中的通用的编程概念。

喜欢的话记得点赞、收藏加关注哦,想要跟着学习可以关注专栏哦

3.2.1. Rust中的变量特性

Rust是静态编译语言,在编译时必须知道所有变量的类型

  • 基于使用的值,编译器通常能够推断出它的具体类型
  • 如果可能的类型比较多,就必须添加类型的标注,否则编译会报错。一下是一个例子:
rust">let guess =6657.parse().expect("Please enter a number")

如果你把这句话放到IDE中,你就会发现IDE提示type error:type annotations needed,这是因为6657这个值即可以被i32u32等类型容纳,编译器不知道应该用哪个类型,就需要显示标注其类型。将代码改成如下即不会报错:

rust">let guess:u32 =6657.parse().expect("Please enter a number")

3.2.2. 标量类型的简介

  • 一个标量类型代表一个单一的值
  • Rust主要有4个标量类型:
    • 整数类型
    • 浮点类型
    • 布尔类型
    • 字符类型

3.2.3. 整数类型:

  • 无符号整数类型(不能表示小数)以u开头,u是unsigned的简写。
  • 有符号整数类型(可以表示小数)以i开头,i是integer的简写。
  • 整数类型字母后的数字代表其占据多少位的空间,例如u32的32就表示占据32位的空间,能表示从0~2^31次方
  • Rust的整数类型列表如图:
    • 每种都分i和u,以及固定的位数
    • 有符号范围:-(2^n - 1) 到 2^n - 1
    • 无符号范围:0到2^n - 1
LengthSignedUnsigned
8-biti8u8
16-biti16u16
32-biti32u32
64-biti64u64
128-biti128u128
archisizeusize

isizeusize类型是比较特殊的两个整数类型,其位数由程序运行的计算机架构所决定的:

  • 如果是64位计算机,那就是64位。isize就相当于i64,usize就相当于u64
  • 如果是32位计算机,那就是32位。isize就相当于i32,usize就相当于u32

使用isizeusize的主要场景是对某种集合进行索引操作。

rust">fn main(){let machine:u32 = 6657;
}

3.2.4. 整数字面值

整数不一定是10进制的,也有其他的进制,使用固定的格式能让程序理解你使用的进制也使别人能看得懂你的代码。

Number literalsExample
Decimal98_222
Hex0xff
Octal0o77
Binary0b1111_0000
Byte (u8 only)b’A’
  • 十进制中可以加上_来增加可读性
  • 16进制以0x开头
  • 8进制以0o开头
  • 二进制以0b开头,可以加上_来增加可读性。
  • 字节类型比较特殊,在 Rust 中,字节的整数字面值是通过b'X'表示的,其中X是单个字符,表示为字节值。这种字面值只能用于u8类型,因为字节值的范围是 0~255X必须是一个 ASCII 字符。例如:b'A'的值是65因为A的ASCII码是65。
  • 除了字节类型,所有的数值字面值都允许使用类型后缀。
  • 如果不太清楚该使用哪种类型,可以使用Rust相应的默认类型。
  • 整数的默认类型是i32,总体上来说速度很快,即使是在64位系统中。

3.2.5. 整数溢出

举个例子,u8的范围是0~255,如果把一个u8变量的值设为256,会出现两种情况:

  • 在调试模式下编译:Rust会检查数据溢出,如果溢出,程序就会在运行时panic。
  • 在发布模式(--release)下编译:Rust不会检查可能导致panic的数据溢出。
    • 如果溢出发生:Rust会执行“环绕”操作:256变成0,257变成1…但不会panic。

3.2.6. 浮点类型

Rust有两种基础的浮点类型;

  • f32:32位单精度
  • f64:64位双精度

Rust使用IEEE-754标准来表述浮点类型

f64是默认类型,因为在现代CPU中f64f32的运行速度差不多,而且f64精度更高。

rust">fn main(){let machine:f32 = 6657.0721;
}

3.2.7. 数值操作

  • 加:+
  • 减:-
  • 乘:*
  • 除:/
  • 余:%
    这些与其他语言无异

3.2.8. 布尔类型

Rust的布尔类型与其他语言无异,有两个值:truefalse,占一个字节,关键字是bool

rust">fn main(){let machine: bool = true;
}

3.2.9. 字符类型

  • Rust语言中的char类型被用来描述语言中最基础的单个字符
  • 字符类型的字面值使用单引号
  • 占用4个字节大小
  • 是Unicode标量值,可以表示比ASCII多得多的字符内容,包括:拼音、中日韩文、零长度空白字符、emoji等。其范围是从U+0000U+D7FF以及U+E000U+10FFFF
  • Unicode中并没有“字符”的概念,所以直觉上认识的字符也许于Rust中的概念并不相符
rust">fn main(){let x:char = `🥵`;
}

http://www.ppmy.cn/news/1556202.html

相关文章

探索Django:从项目创建到图片上传的全方位指南

Django是什么 Django 是一个流行的 Python Web 开发框架,它提供了一系列工具和库,用于帮助开发人员构建高效、可扩展的 Web 应用程序。Django 的目标是让开发者能够以快速和简单的方式构建复杂的 Web 应用,通过提供许多预构建的组件和功能&a…

xshell连接虚拟机,更换网络模式:NAT->桥接模式

NAT模式:虚拟机通过宿主机的网络访问外网。优点在于不需要手动配置IP地址和子网掩码,只要宿主机能够访问网络,虚拟机也能够访问。对外部网络而言,它看到的是宿主机的IP地址,而不是虚拟机的IP。但是,宿主机可…

鸿蒙NEXT开发案例:经纬度距离计算

【引言】 在鸿蒙NEXT平台上,我们可以轻松地开发出一个经纬度距离计算器,帮助用户快速计算两点之间的距离。本文将详细介绍如何在鸿蒙NEXT中实现这一功能,通过简单的用户界面和高效的计算逻辑,为用户提供便捷的服务。 【环境准备…

400G/800G光模块崛起:AI时代的网络基础设施革命

随着AI技术的不断成熟,各行各业都在大规模投入AI。医疗行业通过AI技术实现了更精准的诊断和治疗;金融行业通过AI技术提高了风险管理能力;制造行业通过AI技术优化了生产流程;娱乐行业通过AI技术创造了更加丰富的用户体验。AI在医疗…

在 Ubuntu 下通过 Docker 部署 FTP 服务器

在今天的技术探险中,我们将使用 Docker 在 Ubuntu 上部署一个 FTP 服务器。这不仅能提升文件传输的效率,还能让你在管理上游刃有余。Docker 的灵活性和 vsftpd 的安全性让这一切变得简单有趣。准备好了吗?让我们开始吧! Docker 和…

android 控制主板串口

import com.fazecast.jSerialComm.SerialPort; import java.nio.charset.StandardCharsets; public class SendAndReceiveFromAllPorts { public static void main(String[] args) { SerialPort[] ports SerialPort.getCommPorts(); // 统一的发送指令(16 进制&…

【网络云计算】2024第50周-每日【2024/12/13】小测-理论-写10个Bash Shell脚本-解析

文章目录 1. 计算1到100的和2. 列出当前目录下所有文件和文件夹3. 检查文件是否存在4. 备份文件到指定目录(简单示例)5. 打印系统当前日期和时间6. 统计文件中的行数7. 批量重命名文件(将.txt后缀改为.bak)8. 查找进程并杀死&…

【持续更新】Github实用命令

Intro 最近高强度使用github,遂小计于此作为备忘。 Basic github是一个代码管理软件,能够track文件变动并且管理版本,是当代coding必不可少的工具。当你安装好github在本地以后,你可以通过以下命令初始化当前文件夹&#xff08…