Rust 也提供了基本的位操作给整型类型运算。常见操作如下
- 左移 (
<<
) - 右移 (
>>
) - 与 (
&
) - 或 (
|
) - 非 (
!
), 取反操作 - 异或 (
^
)
与 位操作与 C/C++
中不同的是
- C 语言的取反操作符为
~
,布尔操作的非操作为!
- C 语言的位操作不会严格检查两个操作数的类型,Rust 要求
与/或/非/异或
的操作必须一致,否则编译错误。 - C 语言的左右移操作当移位数超过位数时,通常会编译报警,但 Rust 检测到移位超出位数后编译会立即报错,如果是运行时出现时,则会引起恐慌
panic
) 终止程序。
fn main() { println!("{:x}", 0x0000_0001 << 4); println!("{:x}", 0x1000_0000 >> 4); println!("{:x}", 0x1000_0000 | 0x0000_0001); println!("{:x}", 0xffff_ffffu32 & 0xffff_0000u32); println!("{:x}", !0xffff_0000u32); println!("{:x}", 0xffff_0000u32 ^ 0x00ff_00ffu32); }