当前位置: 首页>后端>正文

rust学习-2.1-位运算符相关(选学)

位运算只要求了解,不要求掌握

基础概念

  1. 位运算符:用于对二进制数进行位操作。
    • &:按位与
    • |:按位或
    • ^:按位异或
    • <<:左移
    • >>:右移
  2. 赋值与位运算结合,先做位运算,在把位运算的结果赋值给运算符左边的变量。
    • <<=:左移后赋值
    • >>=:右移后赋值
    • &=:按位与后赋值
    • ^=:按位异或后赋值
    • |=:按位或后赋值

详解

二进制位运算是在数字的二进制表示形式上进行的运算。在Rust中,位运算符包括:

  1. &(按位与): 对两个数的每一位进行比较,只有两个对应的位都是1时,结果位才是1。
  2. |(按位或): 对两个数的每一位进行比较,只要有一个对应的位是1,结果位就是1。
  3. ^(按位异或): 对两个数的每一位进行比较,如果对应的位不同,结果位是1;如果相同,结果是0。
  4. !(按位非): 反转操作数的每一位,即0变成1,1变成0。
  5. <<(左移): 将操作数的所有位向左移动指定的位数,右边空出的位用0填充。
  6. >>(右移): 将操作数的所有位向右移动指定的位数,对于无符号数,左边空出的位用0填充;对于有符号数,左边空出的位用符号位填充(保持符号位不变)。

图解按位与&

下面我将使用竖式来展示位运算中的“按位与”(AND)运算过程。假设我们有两个8位的二进制数进行按位与运算。

  二进制数A:  10101010
  二进制数B:  11001100
--------------------------
  按位与结果: 10001000

在这个竖式中:

  • 第一行是第一个二进制数 10101010
  • 第二行是第二个二进制数 11001100
  • 第三行是按位与的结果 10001000
    按位与的规则是:只有两个比较的位都是1时,结果位才是1。所以,我们可以逐位比较:
  • 第1位:1 & 1 = 1
  • 第2位:0 & 1 = 0
  • 第3位:1 & 0 = 0
  • 第4位:0 & 0 = 0
  • 第5位:1 & 1 = 1
  • 第6位:0 & 1 = 0
  • 第7位:1 & 0 = 0
  • 第8位:0 & 0 = 0
    将这些结果组合起来,就得到了最终的按位与结果 10001000

代码展示

下面通过一些Rust代码示例来详细解释这些运算符:

fn main() {
    // 按位与
    let a = 0b1010; // 二进制表示
    let b = 0b1100;
    let and = a & b; // 结果是 0b1000
    // 按位或
    let or = a | b; // 结果是 0b1110
    // 按位异或
    let xor = a ^ b; // 结果是 0b0110
    // 按位非
    let not_a = !a; // 结果是 0b0101 的补码,取决于系统是32位还是64位
    // 左移
    let left_shift = a << 2; // 结果是 0b101000
    // 右移
    let right_shift = a >> 1; // 结果是 0b0101
    println!("{} {} {} {} {} {}", and, or, xor, not_a, left_shift, right_shift);
}

在Rust中,位运算符可以用于整数类型(如 i32, u32, i64, u64 等)。
位运算在处理底层硬件、网络协议、加密算法等领域非常有用。例如,你可以使用位运算来设置或清除一个数字的特定位,从而实现某些标志或选项的开关。


https://www.xamrdz.com/backend/3k91938037.html

相关文章: