[Rust]基本数据类型

Posted 您的好友

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Rust]基本数据类型相关的知识,希望对你有一定的参考价值。

本文介绍Rust提供的内置数据类型。

布尔类型

布尔类型代表“是”和“否”的逻辑值。它有两个值:truefalse,一般用在逻辑表达式中,可以执行“与”、“或”、“非”等运算:

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]基本数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Rust标准库之——&str类型

Compound Data Type of Rust

RUST 0x01 数据类型

(转) Java中的负数及基本类型的转型详解

Rust极简教程

Rust学习笔记1.基础语法