Rust学习第二天

Rust基础数据类型

1、整数类型(Inetger)


位长度 有符号位 无符号位


8-bit i8 u8


16-bit i16 u16


32-bit i32 u32


64-bit i64 u64


128-bit i128 u128


arch isize usize


所谓有符号位无符号位指的是如何理解内存空间中的bit表达的含义如果一个变量是有符号类型那么它的最高位的那一个bit就是符号位表示该数为正值还是负值,如果一个变量是无符号类型那么它的最高位和其他位一样表示该数的大小。

isize 和 usize 两种整数类型是用来衡量数据大小的,它们的位长度取决于所运行的目标平台,如果是 32 位架构的处理器将使用 32 位位长度整型。

整数的表述方法有以下几种:


进制 例


二进制 0b1111_0000


八进制 0o77


十进制 98_222


十六进制 0xff


字节(只能表示u8型) b’A’


很显然,有的整数中间存在一个下划线,这种设计可以让人们在输入一个很大的数字时更容易判断数字的值大概是多少。

2、浮点数型(Floating-Point)

Rust 与其它语言一样支持 32 位浮点数(f32)和 64 位浮点数(f64)。默认情况下,64.0 将表示 64 位浮点数,因为现代计算机处理器对两种浮点数计算的速度几乎相同,但 64 位浮点数精度更高。

1
2
3
4
fn main() {
let x = 2.0; *// 默认是f64*,无需特殊声明
let y: f32 = 3.0; *// f32*,
}

3、布尔型(bool)

布尔型用 bool 表示,值只能为 true 或 false。在Rust中,布尔类型的大小为1个字节

1
2
3
4
fn main() {
let a:bool = true;
println!("a为{}",a);
}

4、字符型(char)

字符型用 char 表示。

Rust的 char 类型大小为 4 个字节,代表 Unicode标量值,这意味着它可以支持中文,日文和韩文字符等非英文字符甚至表情符号和零宽度空格在 Rust 中都是有效的 char 值。

Unicode 值的范围从 U+0000 到 U+D7FF 和 U+E000 到 U+10FFFF (包括两端)。 但是,”字符”这个概念并不存在于 Unicode 中,因此您对”字符”是什么的直觉可能与Rust中的字符概念不匹配。所以一般推荐使用字符串储存 UTF-8 文字(非英文字符尽可能地出现在字符串中)。

注意:由于中文文字编码有两种(GBK 和 UTF-8),所以编程中使用中文字符串有可能导致乱码的出现,这是因为源程序与命令行的文字编码不一致,所以在 Rust 中字符串和字符都必须使用 UTF-8 编码,否则编译器会报错。

1
2
3
4
5
6
7
8
fn main() {
let a:char = 'A';
let b:char = '♥';
let c:char = '六';
println!("a{}",a);
println!("{}",b);
println!("{}",c);
}

5、复合类型

元组(tuple)

元组是用一对 ( ) 包括的一组数据,可以包含不同种类的数据:

1
2
3
4
5
6
7
8
    let tup: (i32, f64, u8) = (500, 6.4, 1);
// tup.0 等于 500
// tup.1 等于 6.4
// tup.2 等于 1
let (_x, _y, _z) = tup;
// y 等于 6.4
println!("{}",_x);
}

这里一开始运行的时候中间代码为

1
let (x, y, z) = tup;

提示警告了,查询资料后得到结果;

Rust 语言中元组的定义语法格式如下

1
let tuple_name:(data_type1,data_type2,data_type3) = (value1,value2,value3);

定义元组时也可以忽略数据类型

1
let tuple_name = (value1,value2,value3);

在这里不做深入探讨(Rust格式真的好严格,吐槽一下);

数组(Array)

数组是一种固定长度的数据结构,它可以存储相同类型的多个值。在Rust中,数组的长度是固定的,且数组的类型由元素类型和长度决定。

1
2
3
4
5
6
7
fn main() {
let number:[i32;5] = [1,2,3,4,5];

for number in number.iter(){
println!("Number:{}",number);
}
}

其他表达方式举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
let a = [1, 2, 3, 4, 5];
// a 是一个长度为 5 的整型数组

let b = ["January", "February", "March"];
// b 是一个长度为 3 的字符串数组

let c: [i32; 5] = [1, 2, 3, 4, 5];
// c 是一个长度为 5 的 i32 数组

let d = [3; 5];
// 等同于 let d = [3, 3, 3, 3, 3];

let first = a[0];
let second = a[1];
// 数组访问

a[0] = 123; // 错误:数组 a 不可变
let mut a = [1, 2, 3];
a[0] = 4; // 正确

字符串(String)

字符串是一种文本数据类型,它由一系列Unicode字符组成。在Rust中,字符串类型使用String表示,它是一个可增长的、可变的字符串类型。

1
2
3
4
fn main() {
let message:String = String::from("hello,world");
println!("Message:{}",message);
}

参考文章链接:

http://t.csdnimg.cn/T7btl,

https://www.runoob.com/rust/rust-data-types.html,

http://t.csdnimg.cn/MyV53