本文代码
#[test]
fn test() {
// 与
// 4 -> 00000000 00000000 00000000 00000100
// 6 -> 00000000 00000000 00000000 00000110
// 双方为 1,结果为 1
println!("{}", 4 & 6); // 4
// 或
// 4 -> 00000000 00000000 00000000 00000100
// 6 -> 00000000 00000000 00000000 00000110
// 一方或双方为 1,结果为 1
println!("{}", 4 | 6); // 6
// 异或
// 4 -> 00000000 00000000 00000000 00000100
// 6 -> 00000000 00000000 00000000 00000110
// 双方相同为 0,双方不同为 1
println!("{}", 4 ^ 6); // 2
// 非
// 15 -> 00000000 00000000 00000000 00001111
// 1 变为 0,0 变为 1
println!("{}", !15); // -16
// 左移
// 2 -> 00000000 00000000 00000000 00000010
println!("{}", 2 << 2); // 8
// 右移
// 8 -> 00000000 00000000 00000000 00001000
println!("{}", 8 >> 2); // 2
// 正数的反码等同原码,负数的反码为原码的符号位不变,其余逐位取反
// 正数的补码等同原码,负数的补码为反码 + 1
// 负数以原码的补码表示
// 1 原码 -> 00000000 00000000 00000000 00000001
// -1 原码 -> 10000000 00000000 00000000 00000001
// -1 反码 -> 11111111 11111111 11111111 11111110
// -1 补码 -> 11111111 11111111 11111111 11111111
println!("{:b}", 1);
println!("{:b}", -1);
}