与许多其他语言一样,位运算符&
(位AND)、|
(位OR)、^
(位XOR)也存在:
fn main() {
let mut byte: u8 = 0b0000_0000;
byte |= 0b0000_1000; // Set a bit
println!("0b{:08b}", byte);
byte &= 0b1111_0111; // Unset a bit
println!("0b{:08b}", byte);
byte ^= 0b0000_1000; // Toggle a bit
println!("0b{:08b}", byte);
}
与其他语言的主要区别在于按位NOT,它使用!
而不是~
:
fn main() {
let mut byte: u8 = 0b0000_0000;
byte = !byte; // Flip all bits
println!("0b{:08b}", byte);
}
还可以将位向左或向右移位:
fn main() {
let mut byte: u8 = 0b0000_1000;
byte <<= 1; // shift left one bit
println!("0b{:08b}", byte);
byte >>= 1; // shift right one bit
println!("0b{:08b}", byte);
}
还有许多其他概念性的东西最终会进行位级操作,而不是用运算符来表示.查看documentation for an integer个例子.一个有趣的例子是leading_zeros
.下面是如何旋转一定数量的位:
fn main() {
let mut byte: u8 = 0b1000_0000;
byte = byte.rotate_left(1); // rotate left one bit
println!("0b{:08b}", byte);
byte = byte.rotate_right(1); // rotate right one bit
println!("0b{:08b}", byte);
}