美文网首页Rust语言学习
RUST 学习日记 第7课 ——字面量和运算符

RUST 学习日记 第7课 ——字面量和运算符

作者: L我是小学生 | 来源:发表于2021-06-27 08:26 被阅读0次

    RUST 学习日记 第7课 ——字面量和运算符


    0x00 回顾

    上一节讲解了变量和常量,主要了解了他们的区别。也初步感觉到在Rust中对安全性。这节咱们讲解字面量和常用的一些运算符。

    0x01 字面量(Literal)

    字面量是用于表达源代码中一个固定值的表示法。几乎所有计算机编程语言都具有对基本值的字面量表示,诸如:整数、浮点数以及字符串。对于字面量只能作为等号右边的值出现。

    示例代码如下:

        // 字面量
        // (1)通过后缀表示类型
        let a = 7u8;
        let b = 5.4f64;
        let c = 32i32;
        let d = "zhangsan";
    
        // (2)通过前缀表示进制
        // 二进制
        let e = 0b1;
        // 八进制
        let f = 0o7;
        // 十六进制
        let g = 0xa;
        // byte
        let h = b'A';
    
        // (3)通过 “_” 来分割数据,易于可读性
        let j = 10_000;
        let k = 200_000.000_1;
    

    通过上面的示例可以看到,在Rust中使用前缀来表示进制类型,如0b0o0xb分别表示二进制,八进制,十六进制,字节类型。使用后缀也可以声明字面量的类型,如果let a = 7u8。通过_来分割数值字面量,易于可读性。10_000等于10000

    0x02 算术运算符

    一说到运算符,笔者瞬间想到了童年,坐在小学教室里,老师在黑板上讲解混合四则运算......扯远了。在所有的编程语言中都存在运算符,Rust也不例外。

    名称 运算符 说明
    + 加法运算
    - 减法运算
    * 乘法运算
    / 除法运算
    取余 % 取余运算
        let aa = 12;
        let bb = 9;
        dbg!(aa + bb);
        dbg!(aa - bb);
        dbg!(aa * bb);
        dbg!(aa / bb);
        dbg!(aa % bb);
        // 不支持自定和自减运算符
        // aa++ bb++
    

    代码执行结果:

    [src\main.rs:34] aa + bb = 21
    [src\main.rs:35] aa - bb = 3
    [src\main.rs:36] aa * bb = 108
    [src\main.rs:37] aa / bb = 1
    [src\main.rs:38] aa % bb = 3
    

    另外,Rust并不像C,C++,Java等语言那样支持自增自减运算。但是支持下列的方式运算。

    名称 运算符 说明
    加等于 += 先做加法并赋值给左边的变量
    减等于 -= 先做减法并赋值给左边的变量
    乘等于 *= 先做乘法并赋值给左边的变量
    除等于 /= 先做除法并赋值给左边的变量
    取余等于 %= 先取余并赋值给左边的变量
        let mut cc = 20;
        let dd = 5;
    
        println!("初始值 cc = {} dd = {}", cc, dd);
        // cc = cc + dd;
        cc += dd;
        println!("经过 cc += dd 运算后,cc的值为:{:}", cc);
        // cc = cc - dd;
        cc -= dd;
        println!("经过 cc -= dd 运算后,cc的值为:{:}", cc);
        // cc = cc * dd;
        cc *= dd;
        println!("经过 cc *= dd 运算后,cc的值为:{:}", cc);
        // cc = cc / dd;
        cc /= dd;
        println!("经过 cc /= dd 运算后,cc的值为:{:}", cc);
        // cc = cc % dd;
        cc %= dd;
        println!("经过 cc %= dd 运算后,cc的值为:{:}", cc);
    
        // 自增
        cc += 1;
        println!("经过 cc += 1 运算后,cc的值为:{:}", cc);
        // 自减
        cc -= 1;
        println!("经过 cc -= 1 运算后,cc的值为:{:}", cc);
    

    代码执行结果:

    初始值 cc = 20 dd = 5
    经过 cc += dd 运算后,cc的值为:25
    经过 cc -= dd 运算后,cc的值为:20
    经过 cc *= dd 运算后,cc的值为:100
    经过 cc /= dd 运算后,cc的值为:20
    经过 cc %= dd 运算后,cc的值为:0
    经过 cc += 1 运算后,cc的值为:1
    经过 cc -= 1 运算后,cc的值为:0
    

    看过上面的代码,其实就相当于运算的简写了。例如:a+=b 等同于 a = a + b。其中自增,自减也可以通过上述方法实现了。

    0x03 关系运算符

    关系运算符用于比较两个之间的关系,返回值是一个布尔类型。下面的表格中列举了所有的关系运算符。

    名称 运算符 说明
    大于 > 左操作数大于右操作数则返回 true ,否则返回 false
    小于 < 左操作数小于于右操作数则返回 true,否则返回 false
    等于 == 左操作数等于右操作数则返回 true,否则返回 false
    大于等于 >= 左操作数大于或等于右操作数则返回,true 否则返回 false
    小于等于 <= 左操作数小于或等于右操作数则返回,true 否则返回 false
    不等于 != 左操作数不等于右操作数则返回 true,否则返回 false

    示例代码如下:

        let mm = 15;
        let nn = 30;
    
        dbg!(mm > nn);
        dbg!(mm < nn);
        dbg!(mm == nn);
        dbg!(mm >= nn);
        dbg!(mm <= nn);
        dbg!(mm != nn);
    

    代码执行结果:

    [src\main.rs:74] mm > nn = false
    [src\main.rs:75] mm < nn = true
    [src\main.rs:76] mm == nn = false
    [src\main.rs:77] mm >= nn = false
    [src\main.rs:78] mm <= nn = true
    [src\main.rs:79] mm != nn = true
    

    0x04 逻辑运算符

    逻辑运算符用于组合两个或多个条件表达式,其返回的结果是布尔类型。逻辑运算符就是在数学书常说的“与”,“或”,“非”。严格意义上应该叫做逻辑与逻辑或逻辑非。详细说明见下表。

    名称 运算符 说明
    逻辑与 && 两边的条件表达式都为真则返回 true,否则返回 false
    逻辑或 || 两边的条件表达式只要有一个为真则返回 true,否则返回 false
    逻辑非 ! 如果表达式为真则返回 false,否则返回 true

    示例代码如下:

        let rr = 56;
        let ss = 34;
    
        dbg!(rr > 40 && ss > 40);
        dbg!(rr > 40 || ss > 40);
        dbg!(!(rr > 40));
    

    代码执行结果:

    [src\main.rs:90] rr > 40 && ss > 40 = false
    [src\main.rs:91] rr > 40 || ss > 40 = true
    [src\main.rs:92] !(rr > 40) = false
    

    0x05 位运算符

    位运算符是针对二进制数据进行操作。下表列出了 Rust 支持的所有位运算操作。

    名字 运算符 说明
    位与 & 相同位都是 1 则返回 1,否则返回 0
    位或 | 相同位只要有一个是 1 则返回 1,否则返回 0
    异或 ^ 相同位不相同则返回 1,否则返回 0
    位非 ! 把位中的 1 换成 0 , 0 换成 1
    左移 << 操作数中的所有位向左移动指定位数,右边的位补 0
    右移 >> 操作数中的所有位向右移动指定位数,左边的位补 0

    下面用数字27为例,看下代码的运行结果,示例代码如下:

        // 2 的 二进制表示
        let x: i8 = 0b00000010;
        // 7 的 二进制表示
        let y: i8 = 0b00000111;
    
        println!("{:08b} & {:08b} = {:08b}", x, y, x & y);
        println!("{:08b} | {:08b} = {:08b}", x, y, x | y);
        println!("{:08b} ^ {:08b} = {:08b}", x, y, x ^ y);
        println!("!{:08b} = {:08b}", x, !x);
        println!("{:08b} << 1 = {:08b}", x, x << 1);
        println!("{:08b} >> 1 = {:08b}", x, x >> 1);
    

    PS:代码中{:08b}是将数据转为二进制格式输出,总共输出8位,未知空白部分使用0填充。有关格式化输出的内容,将会在后续章节介绍,这里了解即可。

    代码执行结果:

    00000010 & 00000111 = 00000010
    00000010 | 00000111 = 00000111
    00000010 ^ 00000111 = 00000101
    !00000010 = 11111101
    00000010 << 1 = 00000100
    00000010 >> 1 = 00000001
    

    0x06 小结

    算术运算符已经学完了,有没有想过动手做个题练习下?请使用Rust语言解答下面的思考题:

    小明有5块钱,小红有3块5,小明和小红总共有多少钱呢?

    0x07 本节源码

    007 · StudyRust - 码云 - 开源中国 (gitee.com)

    下节预告——了解Rust的类型转换

    相关文章

      网友评论

        本文标题:RUST 学习日记 第7课 ——字面量和运算符

        本文链接:https://www.haomeiwen.com/subject/pzgtultx.html