当前位置: 首页 > news >正文

006 Rust基本数据类型

整数型(Integer)

整数型简称整型,按照比特位长度和有无符号分为以下两种类:
有符号整数 (i):​​ 可以表示正数、负数和零。以二进制补码形式存储。
无符号整数 (u):​​ 只能表示正数和零。
Rust 提供了多种不同大小的整数类型,由 i或 u后面的数字表示该类型占用的位数(决定了其取值范围)。

位长度有符号无符号最小值(有符号)最大值(有符号)最大值(无符号)
8-biti8u8-128127255
16-biti16u16-327683276765535
32-biti32u32-214748364821474836474294967295
64-biti64u64-2^632^63 - 12^64 - 1
128-biti128u128-2^1272^127 - 12^128 - 1
archisizeusize依赖平台依赖平台依赖平台

isizeusize​​ 这两种类型的长度取决于程序运行的计算机架构。在 64 位架构上是 64 位,在 32 位架构上是 32 位。它们通常用于表示索引、集合的大小或内存地址(指针)。

进制
十进制98_123
十六进制0xff
八进制0o77
二进制0b1111_0000
字节(只能表示u8类型)b’A’

整数中间存在一个下划线,这种设计可以让人们在输入一个很大的数字时更容易判断数字的值大概是多少。
可以在字面量后加类型后缀指定类型 如57u8。
当编译器无法推断整数类型时,默认使用 i32

let a: i32 = 42;        // 显示类型声明有符号32位整数
let b: u64 = 100_000;   // 显示类型声明无符号64位整数(可用_分隔)
let c = 50i8;           // 后缀i8类型
let d = 300u16;         // 后缀u16类型
let e = 0xffu32;        // 后缀十六进制 u32
let f = 0o77_i64;       // 后缀八进制 i64
let g = 0b1110_0000u8;  // 后缀二进制 u8(带分隔符)
let h = 42;             // 编译器推断为 i32
let pointer_size: isize = -10;   // 与指针同宽(通常用于索引)
let size: usize = 1024;          // 无符号平台相关类型

浮点数型(Floating-Point)

​浮点数型即带有小数部分的数字。
Rust支持 32 位浮点数(f32)和 64 位浮点数(f64)。​​

  • f32: 32 位单精度浮点数。
  • f64: 64 位双精度浮点数。

默认类型: Rust 的浮点数默认类型是 f64。因为在现代 CPU 上,f64的速度与 f32几乎相同,但 64 位浮点数精度更高。
​字面量表示: ​​

  • 标准: 3.14, 0.1
  • 科学计数法: 6.022e23, 1e-6
  • 可以加后缀: 2.0f32
// 方式 1:显式类型注解
let float_32: f32 = 3.14159; 
// 方式 2:类型后缀
let float_32 = 3.14159f32;
// 方式 3:函数返回值类型
fn get_pi() -> f32 {3.14159
}
// 方式 1:显式类型注解
let float_64: f64 = 3.141592653589793; 
// 方式 2:类型后缀
let float_64 = 3.141592653589793f64;
// 方式 3:默认类型(不指定类型时自动推断为 f64)
let default_float = 3.14;  // 编译器自动推断为 f64

布尔型

布尔型用 bool 表示,值只能为 true 或 false。

let is_rust_fast: bool = true;  // 显式声明类型
let is_java_fast: bool = false; // 显式声明类型
let is_sunny = true;   // 编译器自动推断为 bool
let is_raining = false; // 编译器自动推断为 bool

Rust 的布尔类型是严格的,不能像 C/C++ 那样将数值当作布尔值使用。
如果需要将布尔值转换为整数,需要显式转换:

let true_as_int = true as i32; // 1
let false_as_int = false as i32; // 0

字符型(char)

​表示单个 Unicode 标量值,占​4 个字节(32 位),​​ 可以表示比 ASCII 丰富得多的字符集,包括各种语言的字母、表情符号等。
字面量表示: 用单引号 '括起来: ‘A’, ‘z’, ‘ф’, ‘猫’。
注意: 这与用双引号 "括起来的字符串切片 &str或 String类型不同。char是单个字符,字符串是字符序列。一般推荐使用字符串储存 UTF-8 文字(非英文字符尽可能地出现在字符串中)。
由于中文文字编码有两种(GBK 和 UTF-8),所以编程中使用中文字符串有可能导致乱码的出现,这是因为源程序与命令行的文字编码不一致,所以在 Rust 中字符串和字符都必须使用 UTF-8 编码,否则编译器会报错。

let letter = 'A';        // 英文字母
let digit = '7';         // 数字字符
let symbol = '$';        // 符号
let space = ' ';         // 空格
let chinese: char = '中'; // 中文字符
let emoji: char = '😊';   // 表情符号
let heart = '\u{2764}';  // ❤ 使用 Unicode 码点
let omega = '\u{03A9}';  // Ω 希腊字母
let newline = '\n';      // 换行符
let tab = '\t';          // 制表符
let single_quote = '\''; // 单引号本身
let backslash = '\\';    // 反斜杠
let ascii_a = b'A' as char; // 从字节转换为 char(仅适用于 ASCII 字符)

常见操作:
1、检查字符属性

let c = 'A';
assert!(c.is_alphabetic());  // 是否是字母
assert!(c.is_ascii());       // 是否是 ASCII 字符
assert!(!c.is_numeric());    // 是否是数字

2、大小写转换

let lower = 'a';
let upper = lower.to_ascii_uppercase(); // 'A'let upper = 'B';
let lower = upper.to_ascii_lowercase(); // 'b'

3、转换为数字

let digit = '7';
let num = digit.to_digit(10); // Some(7)let hex_digit = 'F';
let num = hex_digit.to_digit(16); // Some(15)

4、模式匹配

match some_char {'a'..='z' => println!("小写字母"),'A'..='Z' => println!("大写字母"),'0'..='9' => println!("数字"),_ => println!("其他字符"),
}

注意事项:
1、字符字面量不能为空​(''是无效语法)。
2、多字符(如字符串)不能赋值给 char类型。

复合类型

复合类型可以将多个值组合成一个类型。Rust 有两个原生的复合类型:元组数组
​1、元组 (Tuple)​​
​定义:​​ 将多个不同类型的值组合成一个复合类型的通用方法。
​语法:​​ 使用圆括号 () 将值括起来,值之间用英文逗号 ,分隔。每个位置可以有不同的类型
特点:长度固定,一旦声明,其长度元素的类型就不能改变。

// 声明元组
let var:(T1, T2, ..., Tn);   // 固定长度,可包含不同类型 (T1, T2...) 的值
let tup: (i32, f64, u8) = (500, 6.4, 1); // 显式类型注解
let tup = (500, 6.4, 1); // 类型推断

获取元组中的值

  • 模式匹配解构:
let (x, y, z) = tup; // x = 500, y = 6.4, z = 1
  • 点号 .加索引
let one = tup.0; // 访问第一个元素 (索引从0开始)
let two = tup.1;
let three = tup.2;

2、数组 (Array)​​
​定义:​​ 将多个相同类型的值组合成一个集合。
​语法:​​ 使用方括号 []将值括起来,值之间用英文逗号 ,分隔。数组的类型写作 [T; N],其中 T是元素类型,N是编译时确定的固定长度。

// 声明数组
let var:[T; N];    // 固定长度 N,所有元素必须是相同类型 T,在栈上分配,长度固定
let a: [i32; 5] = [1, 2, 3, 4, 5]; // 显式声明类型
let a = [1, 2, 3, 4, 5]; // 类型推断为 [i32; 5]
let b = [3; 5]; // 等同于 [3, 3, 3, 3, 3],类型是 [i32; 5]

获取数组值
使用方括号 []加索引。索引从 0 开始。

let first = a[0]; // 1
let second = a[1]; // 2

文章转载自:

http://nVFrqpv6.sgysm.cn
http://hQo6Nv2G.sgysm.cn
http://ykamCOQ5.sgysm.cn
http://kKQ5pQJ2.sgysm.cn
http://Mn8zJvjS.sgysm.cn
http://4ow2ZWih.sgysm.cn
http://kj8GGKIy.sgysm.cn
http://lS1FnBQz.sgysm.cn
http://hGI6tQjt.sgysm.cn
http://LWc7nGFj.sgysm.cn
http://6YZVRZCV.sgysm.cn
http://VXbPDD2a.sgysm.cn
http://vMfDMtsv.sgysm.cn
http://viUYE5B2.sgysm.cn
http://Kj4hTTQl.sgysm.cn
http://uIyqji5z.sgysm.cn
http://AYV7fQKb.sgysm.cn
http://Gt8ooZQl.sgysm.cn
http://sE6bC4Fd.sgysm.cn
http://kZHpBTNl.sgysm.cn
http://gEp5IlGL.sgysm.cn
http://OQGW6goY.sgysm.cn
http://qLTv1478.sgysm.cn
http://7MMnWSSA.sgysm.cn
http://5MkyGAPU.sgysm.cn
http://tmVYb6HX.sgysm.cn
http://VBkaUwk6.sgysm.cn
http://eHDpcLi9.sgysm.cn
http://bjodhWl7.sgysm.cn
http://yDGsGABK.sgysm.cn
http://www.dtcms.com/a/386857.html

相关文章:

  • docker配置代理加速
  • 基于MATLAB的视频动态目标跟踪检测实现方案
  • AirPods Pro 3正式发布:全方位升级​
  • PyTorch生成式人工智能(29)——基于Transformer生成音乐
  • 《如龙8外传》共五章:漂流记、老人与海、金银岛等!
  • NVIDIA DOCA与BlueField DPU理解与学习
  • 蜜罐--攻防、护网的强大助力
  • OpenStack 学习笔记
  • 2025年09月16日Github流行趋势
  • git永久存储凭证(可以不用经常输入git密钥)
  • 豆包对高可用系统建设的理解
  • nginx.org 官方仓库安装与配置 NGINX
  • 数据驱动的核心基石:概率分布全家桶的技术实践与方法论思考
  • 贪心算法应用:抗干扰信道分配问题详解
  • 深度搜索 DeepSearch GLM-4.5-flash 实现
  • 基础分割模型U-Net
  • LeetCode:8.无重复字符的最长字串
  • 卷积神经网络搭建实战(一)——torch云端的MNIST手写数字识别(全解一)
  • 实验四 Cache 3种不同的地址映射机制(仿真)
  • 北航计算机保研机试题+解答
  • Python Flask快速入门
  • AirPodsDesktop,一个AirPods 桌面助手
  • Java 调用 C++ 动态库(DLL)完整实践:有图像有实体处理场景
  • 教育行业智慧文档平台:构建安全合规、高效协同的教学研究与资源共享解决方案
  • 网编day7(网络词典)(部分)
  • CodeBuddy AI 深度体验:模型怎么选不踩坑?
  • MQ高级.
  • 46.Mysql基础及案例
  • 贪心算法应用:文件合并问题详解
  • 什么是“孤块”?