Rust语言入门教程(四) - 标量数据类型

标量类型(Scalar Types)

在Rust中,一共有4中标量类型, 也就是基本数据类型,分别是:

  • 整型(Integers)
  • 浮点型(Floats)
  • 布尔型(Boolean)
  • 字符型(Characters)

整型

无符号整型(Unsigned) 有符号整型(Signed)
u8 i8
u16 i16
u32 i32
u64 i64
u128 i128
usize isize

其中分为无符号整型(以u开头),和有符号整型(以i开头),后面的数据代表该类型在内存中占多少bits. 其中usize类型是个例外,usize 类型的位数取决于目标平台的架构:

  • 在 32 位架构上,usize 是 32 位的。
  • 在 64 位架构上,usize 是 64 位的。

usize 类型通常用于索引集合和与内存大小相关的操作,其大小与平台的内存寻址能力相匹配,确保在任何平台上都能高效地进行这些操作。例如可以用于arrayvector的索引的类型。isizeusize类似,只不过它是有符号的而已。

如果在声明一个整型变量时没有显式的标准类型的话,整型变量默认会被Rust识别为i32类型,因为这个类型的性能通常是最好的,即使是在64位的系统上也是如此。

需要注意的是,虽然Rust有这些整型,但根据你的系统位数不同,有的整型类型可能不被支持,比如在一个16-bit的系统中,就只支持16位及以下的整型类型(u8,i8, u16,i16)和usize, isize.

整型与进制

进制 写法示例 说明
十进制(Decimal) 100000 直接以数字开头
十六进制(Hex) 0xdeadbeef 0x开头的数字会被识别为16进制
八进制(Octal) 0o77543211 0o开头的数字会被识别为8进制
二进制(Binary) 0b11110011 0b开头的数字会被识别为二进制
字节(byte) b’A’ 用b开头,单引号内为一个ASCII码范围内的字符,因此byte类型在Rust中跟u8类型是等价的,因为他们都是0-255之间的数字

Rust会自动忽略在数字中出现的_, 因此可以在数字中间任意位置加上_以方便我们阅读代码,例如:

进制 写法示例 加下划线写法
十进制(Decimal) 100000 100_000
十六进制(Hex) 0xdeadbeef 0xde_ad_be_ef
八进制(Octal) 0o77543211 0o7754_3211
二进制(Binary) 0b11110011 0b1_1_1_1_0_0_1_1

浮点型

浮点类型比整型简单许多,只有两种类型:

  • f32
  • f64
    他们之间的区别就是精度上的不同,默认情况下浮点数的类型是f64, 但是如果你的操作系统位数是低于64位的, f64的性能就会很差,这是需要注意的一点。

浮点类型的格式遵循IEEE-754标准规范,由整数位,小数点和小数位组成,如:

3.1415926   // legal
.1			// illegal, 必须有整数位
0.1			// legal

数字类型的声明方法

在定义一个数字类型的变量时, 有两种标注类型的方法。 第一种与我们之前介绍变量声明的章节中一样:

let x: u16 = 5;
let y: f32 = 3.14;

第二种方法,也可以将类型作为后缀,放在值的后面,如下:

let x = 5u16;
let y = 3.14f32;

为了方便阅读,也可以像在上一节中所说的一样,在数字中加上_, 如下:

let x = 5_u16;
let y = 3.14_f32;

这种方法在我们需要给一些泛型函数传递指定类型的参数时很有帮助, 比如一个函数有一个参数x, 这个参数x的类型可以是u16 , 也可以是u32, 根据参数的类型不同,函数的行为会发生变化, 此时如果我需要传入的参数值为5, 那么我就需要为这个5指定类型,那么便可以写为5u16 或者 5u32

布尔型

布尔型只有两个可能的值:

  • true
  • false

注意都是小写。 可以如下定义一个布尔型变量:

let b: bool = true;
let c = false;

布尔型不是数字,因此不可以用于数学计算,除非用as关键词把它转换,例如:

fn main(){
	let x = 10 - true;
	println!("{}", x);
}

这样是会报错的, 但是改成下面这样就不会了:

fn main(){
	let x = 10 - true as u8;
	println!("{}", x);
}

上面的代码中true as u8会把布尔型转换成整型(1u8),因此最终程序输出的结果是9

字符型

char这个类型的命名并不准确,每个char类型的变量应该都是一个标准的unicode值, 例如下面的值都是合法的:

let my_letter = 'a';
let i_kratkoa = 'й' ;
let ideograph = '你';
let my_fire = ''

如上, 一个char变量的值可能是一个英文字母,也可能是一个其他语言中的字母,也可能是一个汉字, 甚至可以是一个表情符号,还可能是一些不可打印的控制符号,只要它是在unicode可以表示的范围内,一个char类型的变量占4 bytes的空间。

其他语言中, string一般都是由char组成的, 但是在Rust中却不是。Rust中的String中的元素是UTF-8格式的,而char类型不是, 因此String并没有用到char类型。

我们的代码编辑器显示的源代码也是UTF-8格式的,因此,我们在代码中看到的一个字符,其实并不等同于Rust中的一个char

小结

本章主要介绍了Rust的四种标量类型的使用方法与注意事项,下一章将介绍Rust中的复合数据类型。

你可能感兴趣的:(Rust教程,rust,开发语言,后端)