二进制字节位的几个操作例子:

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