二進制字節位的幾個操作例子:
0110 & 1011 = 0010 // 與 AND 都為 1
0110 | 1011 = 1111 // 或 OR 至少一個為 1
0110 ^ 1011 = 1101 // 異或 XOR 只能一個為1
0110 &^ 1011 = 0100 // 位清除 AND NOT 清除標志位, 不都為1 a &^ b 的意思就是 清零a中,ab都為1的位
^0001 0100 = 1110 1011 // ^作一元運算符表示是按位取反
fmt.Printf("%b\r\n", 1<<3) 1000 // << 左移
fmt.Printf("%b\r\n", 255>>3) 11111 // >> 右移
常見場景函數
判斷指定位的數字是否是1
// 獲得num數字二進制時,bit位的值
func valueAtBit(num, bit int) int {
return (num >> (bit - 1)) & 1
}
fmt.Printf("%b\r\n", 8) // 1000
fmt.Printf("%b\r\n", valueAtBit(8, 3)) // 0
fmt.Printf("%b\r\n", valueAtBit(8, 4)) // 1
進制的表示
fmt.Printf("%d\r\n", 0b10) // 二進制的 2
fmt.Printf("%d\r\n", 012) // 八進制的 10
fmt.Printf("%d\r\n", 12) // 十進制的 12
fmt.Printf("%d\r\n", 0x12) // 十六進制 的 18