2.2 Rust 数据类型
2.2 数据类型
let guess: u32 = "42".parse().expect("Not a number!");
Rust has four primary scalar types: integers, floating-point numbers, Booleans, and characters.
整数类型

u32,this type declaration indicates that the value it’s associated with should be an unsigned integer (signed integer types start with i, instead of u) that takes up bits of space. Additionally, the isize and usize types depend on the kind of computer your program is running on: bits if you’re on a -bit architecture and bits if you’re on a -bit architecture.

Note that all number literals except the byte literal allow a type suffix, such as 57u8, and _ as a visual separator, such as 1_000.
整数溢出
Let’s say that you have a u8, which can hold values between zero and . What happens if you try to change it to ? This is called “integer overflow,” and Rust has some interesting rules around this behavior. When compiling in debug mode, Rust checks for this kind of issue and will cause your program to panic, which is the term Rust uses when a program exits with an error. In release builds, Rust does not check for overflow, and instead will do something called “two’s complement wrapping.” In short, becomes , becomes , etc. Relying on overflow is considered an error, even if this behavior happens. If you want this behavior explicitly, the standard library has a type, Wrapping, that provides it explicitly.
浮点类型
Rust’s floating-point types are f32 and f64, which are 32 bits and 64 bits in size, respectively. The default type is f64 because on modern CPUs it’s roughly the same speed as f32 but is capable of more precision.
fn main() {
let x = 64.0 ; //f64
let y: f32 = 32.0; //f32
println!("64:{},32:{}",x,y);
}
The f32 type is a single-precision float, and f64 has double precision.
数字运算
fn main() {
// addition
let _sum = 5 + 10;
// subtraction
let _difference = 95.5 - 4.3;
// multiplication
let _product = 4 * 30;
// division
let _quotient = 56.7 / 32.2; //1.7608695652173911 小数点后16位
let _ff32 = 7f32 / 3f32; //2.3333333 7位小数
// remainder
let _remainder = 13 % 5; //3
println!{"32位除法:{}",_ff32}
println!{"默认64位除法:{}",_quotient};
println!{"求余:{}",_remainder};
}
整数与浮点数不可以混合运算,比如 let _cc = 10 * 3.0; 会报以下错误
^ no implementation for `{integer} * {float}`
error: Could not compile `datatype`.
布尔类型
fn main() {
let _t = true;
let _f: bool = false; // with explicit type annotation
}
字符类型
fn main() {
let _a = 'z';
let _b = 'ℤ';
let _c = 'Z';
}
Rust’s char type represents a Unicode Scalar Value, which means it can represent a lot more than just ASCII. Accented letters; Chinese, Japanese, and Korean characters; emoji; and zero-width spaces are all valid char values in Rust. Unicode Scalar Values range from U+ to U+D7FF and U+E000 to U+10FFFF inclusive. However, a “character” isn’t really a concept in Unicode, so your human intuition for what a “character” is may not match up with what a char is in Rust.
复合类型
Compound types can group multiple values into one type. Rust has two primitive compound types: tuples and arrays.
元组存放数据的数据类型可以不同,数组则必须是相同类型。
元组
A tuple is a general way of grouping together some number of other values with a variety of types into one compound type. Tuples have a fixed length: once declared, they cannot grow or shrink in size.
Each position in the tuple has a type, and the types of the different values in the tuple don’t have to be the same.
fn main() {
let _tup: (i32, f64, u8) = (500, 6.4, 1);
let _aa = (1,2.3,"wa ka ka ");
let (_x,_y,_z) = _aa;
println!("The value of z is:{}",_z)
}
This program first creates a tuple and binds it to the variable tup. It then uses a pattern with let to take tup and turn it into three separate variables, x, y, and z. This is called destructuring, because it breaks the single tuple into three parts. In addition to destructuring through pattern matching, we can access a tuple element directly by using a period (.) followed by the index of the value we want to access.
fn main() {
let _x: (i32, f64, u8) = (500, 6.4, 1);
let _five_hundred = _x.0;
let _six_point_four =_x.1;
let _one = _x.2;
println!("第三个元素:{}",_one);
}
数组类型
Unlike a tuple, every element of an array must have the same type. Arrays in Rust are different from arrays in some other languages because arrays in Rust have a fixed length, like tuples.
fn main() {
let _a = [1, 2, 3, 4, 5];
}
Arrays are useful when you want your data allocated on the stack rather than the heap or when you want to ensure you always have a fixed number of elements. An array isn’t as flexible as the vector type, though. A vector is a similar collection type provided by the standard library that is allowed to grow or shrink in size. If you’re unsure whether to use an array or a vector, you should probably use a vector.
It’s very unlikely that such a program will need to add or remove months, so you can use an array because you know it will always contain 12 items
fn main() {
let _a = [1, 2, 3, 4, 5];
let _months = ["January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"];
}
Arrays have an interesting type; it looks like this: [type; number]. For example:
fn main() {
let _b: [i32; 5] = [1, 2, 3, 4, 5];
}
访问数组元素
fn main() {
let _b: [i32; 5] = [1, 2, 3, 4, 5];
let _c1 = _b[0];
let _c2 = _b[1];
}
数组越界
fn main() {
let a = [1, 2, 3, 4, 5];
let index = 10;
let element = a[index];
println!("The value of element is: {}", element);
}
编译阶段不会报错,在运行时会报错
[root@itoracle src]# cargo build
Compiling datatype v0.1.0 (/usr/local/automng/src/rust/test/datatype)
Finished dev [unoptimized + debuginfo] target(s) in 1.39s
[root@itoracle src]# cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `/usr/local/automng/src/rust/test/datatype/target/debug/datatype`
thread 'main' panicked at 'index out of bounds: the len is 5 but the index is 10', src/main.rs:5:19
note: Run with `RUST_BACKTRACE=1` for a backtrace.
类型转换
fn data02(){
println!("-------显式类型转换-------");
let a = ;
let b = a as f64;
let c = b * 2.0;
println!("c={}",c); //c=2
println!("-------------------------------------------------------");
}
2.2 Rust 数据类型的更多相关文章
- Rust 数据类型
Rust中的每个值都具有特定的数据类型. 基础类型: 整数,浮点数,布尔值和字符 i8,i16,i32,i64,i64,i128,isize, u8,u16,u32,u64,u64,u128,usiz ...
- rust数据类型
fn main() { //char支持4个字节,支持emoji let jp = "ゆ"; let emoji = "✨"; let ch = "囧 ...
- Rust学习笔记一 数据类型
写在前面 我也不是什么特别厉害的大牛,学历也很低,只是对一些新语言比较感兴趣,接触过的语言不算多也不算少,大部分也都浅尝辄止,所以理解上可能会有一些偏差. 自学了Java.Kotlin.Python. ...
- Rust <1>:数据类型、变量、可变性、常量、隐藏
rust 是强类型语言,所有变量.常量都必须有明确的数据类型:很多情况下,省略类型声明,编译器可自动推导,但不是所有情况下都会成功. rust 有整型.浮点型.布尔型.字符型.数组.元组.枚举.结构体 ...
- Rust之路(2)——数据类型 上篇
[未经书面同意,严禁转载] -- 2020-10-13 -- Rust是系统编程语言.什么意思呢?其主要领域是编写贴近操作系统的软件,文件操作.办公工具.网络系统,日常用的各种客户端.浏览器.记事本. ...
- Rust之路(3)——数据类型 下篇
[未经书面同意,严禁转载] -- 2020-10-14 -- 架构是道,数据是术.道可道,非常道:术不名,不成术!道无常形,术却可循规. 学习与分析数据类型,最基本的方法就是搞清楚其存储原理,变量和对 ...
- Rust基本数据类型
基本类型 Rust 每个值都有其确切的数据类型,总的来说可以分为两类:基本类型和复合类型. 基本类型意味着它们往往是一个最小化原子类型,无法解构为其它类型(一般意义上来说),由以下组成: 数值类型: ...
- Rust语言中的常量,变量,运算符,数据类型
简单练练, 夏天太热. const MAX_POINTS: u32 = 100_100; fn main() { let mut x = 5; let y = 5; let y = y + 1; le ...
- Rust语言的多线程编程
我写这篇短文的时候,正值Rust1.0发布不久,严格来说这是一门兼具C语言的执行效率和Java的开发效率的强大语言,它的所有权机制竟然让你无法写出线程不安全的代码,它是一门可以用来写操作系统的系统级语 ...
随机推荐
- 一个典型的PHP分页实例代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- vue 之 箭头函数与对象的单体模式
箭头函数 基本语法: ES6允许使用“箭头”(=>)定义函数 var f = a = > a //等同于 var f = function(a){ return a; } 如果箭头函数不需 ...
- 安装postman工具模拟请求
扩展工具->: 注意,在创建快捷方式后,第一次打开这个工具,会让你注册信息,忽略它.关闭,重新打开postman工具,然后如下所示:
- java 中一个char包含几个字节
背景 char包含几个字节可能记得在上学的时候书上写的是2个字节,一直没有深究,今天我们来探究一下到底一个char多少个字节? Char char在设计之初的时候被用来存储字符,可是世界上有那 ...
- wrodcount
PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 20 20 · Estimate · 估计这个任务需要多少时间 20 20 Development 开 ...
- 基于.NET平台常用的框架整理[转载]
自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就 ...
- oracle安装和使用问题解决方案
1.Enter the full pathname for java.exe 要输入的是32位系统的jdk中的java.exe路径,比如 C:\Program Files\Java\jdk1.6.0 ...
- C#字符串要点(复习专用)
一.字符串 通过string定义一个字符串,或者通过String类来创建对象. 通过new String() 创建有一下几种构造函数(从元数据),以此顺序创建string: // // 摘要: // ...
- ASP.NET Core 部署到Cont OS 服务器
一.前言 当 asp.net core 发布以后,实现了跨平台.基于好奇,我就测试了一下 core 项目部署到 linux 服务器.感觉一路还是有所收获,接下来记录一下操作流程. 工具:window ...
- 100个大型机器学习数据集汇总(CV/NLP/音频方向)
网站首页: 网址:数据集