[Rust]基本数据类型
Posted 您的好友
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Rust]基本数据类型相关的知识,希望对你有一定的参考价值。
本文介绍Rust提供的内置数据类型。
布尔类型
布尔类型代表“是”和“否”的逻辑值。它有两个值:true
和false
,一般用在逻辑表达式中,可以执行“与”、“或”、“非”等运算:
fn main() {
let x = true;
let y: bool = !x; //false, 取反运算
let z = x && y; //false,逻辑与运算,带有短路功能
let z = x || y; //true,逻辑或运算,带有短路功能
let z = x & y; //false,按位与运算,不带短路功能
let z = x | y; //true,按位或运算,不带短路功能
let z = x ^ y; //true,按位异或运算,不带短路功能
}
一些比较运算表达式的类型是布尔类型:
fn logical_op(x: i32, y: i32) {
let z = x < y; // z是布尔类型
println!("z = {}", z);
}
布尔类型表达式可以用在if/while
表达式中,作为条件表达式:
if a >= b {
...
} else {
...
}
C/C++会隐式地将字符、整数、浮点数和指针转换为布尔值;Python允许在布尔值上下文中使用字符串、列表、字典、集合。对于它们来说,如果这些值不为0
或空,就将它们视为true
。相对而言,Rust更加严格:if/while
表达式的条件必须是布尔类型表达式。
Rust的as
操作符可以把bool
值显式地转换为整数类型:
assert_eq!(false as i32, 0);
assert_eq!(true as i32, 1);
但是,不能将数值类型转换为布尔类型,这种情况下必须进行显式转换:
let x = 0;
let y = 1;
assert_eq!(x as bool, false); //错误,不允许使用as将数值类型转换为布尔类型
assert_eq!(y as bool, true); //错误,不允许使用as将数值类型转换为布尔类型
//必须使用显式比较
if x == 0 {...}
if y == 1 {...}
理论上来讲,一个布尔类型仅仅需要一个比特位即可表示,但是Rust在内存中使用整整一个字节作为bool
值,因此允许创建一个指向布尔值的指针。
字符类型
Rust的字符类型char
使用4个字节的内存空间来保存单个unicode码点。在代码中,单个字符字面量使用一对单引号包围:
let love = \'❤\' //可以直接嵌入任何Unicode字符
字符字面量中可以使用转义符:
let c1 = \'\\n\'; //换行符
let c2 = \'\\u{7FFF}\'; //Unicode字符
根据Unicode字符的标准,char
类型保存的码点范围在[0x0000,0xD7FF]U[0xE000,0x10FFFF]
之中。Rust的类型系统会进行动态检查,保证char
的值始终在上述合法范围当中。
Rust从来不会隐式地在char
与其他类型之间进行转换。如果有需要,可以使用as
操作符将char
类型转换为数值类型。如果目标数值类型的大小不足4个字节,字符的高位内存会被截断:
assert_eq!(\'*\' as i32, 42);
assert_eq!(\'以上是关于[Rust]基本数据类型的主要内容,如果未能解决你的问题,请参考以下文章