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

Rust-03-数据类型

在 Rust 中,每一个值都属于某一个 数据类型,这告诉 Rust 它被指定为何种数据,以便明确数据处理方式。Rust 是 静态类型语言,也就是说在编译时就必须知道所有变量的类型。根据值及其使用方式,编译器通常可以推断出我们想要用的类型。当多种类型均有可能时,必须增加类型注解,Rust语言中的数据类型包括基础数据类型和复合类型。

一、基础数据类型

1.整数型

整数型:Rust提供了多种整数类型,如i32、u32、i64和u64等,分别代表有符号和无符号的32位和64位整数。整数类型的选择取决于你需要的数值范围和性能要求。

LengthSignedUnsigned
8-biti8u8
16-biti16u16
32-biti32u32
64-biti64u64
128-biti128u128
archisizeusize

2.浮点型

浮点数型:浮点数类型用于表示带有小数的数值,包括f32和f64,分别是32位和64位浮点数。在进行数学计算时,选择合适的精度可以避免不必要的性能损耗。

fn main() {let x = 2.0; // f64let y: f32 = 3.0; // f32
}

3.布尔型

布尔型:布尔型(bool)是逻辑值true和false的集合,常用于条件判断和逻辑运算。

fn main() {let t = true;let f: bool = false; // with explicit type annotation
}

4.字符型

字符型:字符类型(char)用于表示单个Unicode字符。与C语言不同,Rust的char类型使用UTF-8编码,能表示Unicode扩展字符集。

fn main() {let c = 'z';let z: char = 'ℤ'; // with explicit type annotationlet heart_eyed_cat = '😻';
}

二、复合数据类型

1.数组

数组允许你存储同一类型的多个值。它们在内存中是连续的,并且长度固定。数组的类型签名中包含了元素的类型和数组的长度。

let months = ["January", "February", "March", "April", "May", "June", "July","August", "September", "October", "November", "December"];
let ja = months[0];

2.元组

元组(tuple)可以存储不同类型的多个值。它们是有序的,并且每个位置可以有不同的类型。元组通常用于一次性返回多个值。
元组是一个将多个其他类型的值组合进一个复合类型的主要方式。元组长度固定:一旦声明,其长度不会增大或缩小。元组的第一个索引值是 0。可以使用点号(. )后跟值的索引来直接访问它们。

fn main() {let tup = (500, 6.4, 1); // 元组let (x, y, z) = tup; // 模式匹配解构println!("The value of y is: {y}");let x = tup.0;
}

当确定元素个数不会改变时,数组会更有用。例如,在一个程序中使用月份名字时,你更应趋向于使用数组而不是 vector,因为你确定只会有 12 个元素。

三、总结

fn main() {let x:i32 = 10; // 整形let y:f32 = 2.0; // 浮点型let hex = 0xff; // 16进制let byte = b'A'; // 单字节字符仅限于 u8let bool = true; // 布尔let c = 'c'; // 字符let c = '🐕';let tup = (10,"hello",true); // 元组let id = tup.0;let array = [3;5]; // 数组let idx = array[x];
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【前端】详解JavaScript事件代理(事件委托)
  • ---java 抽象类 和 接口---
  • 【设计模式】行为型设计模式之 迭代器模式
  • LeetCode 算法:合并区间c++
  • 封装了一个简单理解的iOS竖直文字轮播
  • k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
  • Wireshark TS | 应用传输丢包问题
  • No ‘ChromeSansMM’ font 错误解决
  • 渗透测试之内核安全系列课程:Rootkit技术初探(一)
  • vue面试题2-根据以下问题回答
  • ChatGP和kimi对比
  • Docker之路(三)docker安装nginx实现对springboot项目的负载均衡
  • Java 程序结构 -- Java 语言的变量、方法、运算符与注释
  • Apache Spark
  • 解释一下I/O多路复用模型?
  • CentOS7 安装JDK
  • Django 博客开发教程 8 - 博客文章详情页
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Java新版本的开发已正式进入轨道,版本号18.3
  • PHP 7 修改了什么呢 -- 2
  • spring-boot List转Page
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 编写符合Python风格的对象
  • 前端攻城师
  • 如何优雅地使用 Sublime Text
  • 使用权重正则化较少模型过拟合
  • 微服务核心架构梳理
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 以太坊客户端Geth命令参数详解
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (39)STM32——FLASH闪存
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • *Django中的Ajax 纯js的书写样式1
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET CLR基本术语
  • .NET HttpWebRequest、WebClient、HttpClient
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [C puzzle book] types
  • [C#]调用本地摄像头录制视频并保存
  • [CR]厚云填补_多云条件下土地覆盖分割的多模态多任务学习
  • [Day 65] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • [Delphi]一个功能完备的国密SM4类(TSM4)[20230329更新]
  • [docker] Docker的私有仓库部署——Harbor