获得徽章 0
- #青训营 x 字节后端训练营# 来个位运算:
var x uint8 = 1<<1 | 1<<5
var y uint8 = 1<<1 | 1<<2
fmt.Printf("%08b\n", x) // "00100010", 集合 {1, 5}
fmt.Printf("%08b\n", y) // "00000110", 集合 {1, 2}
fmt.Printf("%08b\n", x&y) // "00000010", 取集合的交集 {1}
fmt.Printf("%08b\n", x|y) // "00100110", 取集合并集 {1, 2, 5}
fmt.Printf("%08b\n", x^y) // "00100100", 对称差 x + y - xy = {2, 5}
fmt.Printf("%08b\n", x&^y) // "00100000", 差集 x - y = {5}
for i := uint8(0); i < 8; i++ {
if x&(1<<i) != 0 { // 判断第 i 位是否为 1
fmt.Printf("%d, ", i)
}
}
fmt.Printf("%08b\n", x<<1) // "01000100", 集合 {2, 6}
fmt.Printf("%08b\n", y>>1) // "00000011", 集合 {0, 1}展开评论1