go 位运算和移位运算

计算机的所有运算都是以补码在运算。

1 & (按位与) : 两位全为1,则结果为1,否则为0
a := 1  补码为 0001
b := 2  补码: 0010  
推导为===> 0000
fmt.Println(a & b) // 0

c := 2  // 0010
d := 3  // 0011   
推导同为1的二进制位:0010  所以结果为:2
fmt.Println(a & b) // 2
2 | (按位或) : 两位其中有一位为1就为1,结果则为1,否则就为0
2 的补码为:0010
3 的补码为:0011  ===> 0011
fmt.Println(2 | 3) //  3 
3 相异或运算: 当对应二进制位不同时结果为1,相同时为0
2   补码为0010
3   补码:0011   
===> 0001
fmt.Println(2 ^ 3) //  1
左移 <<
左移2位,高位丢弃,低位补0
1 补码:0001
2 补码:0010
===> 往左移2位:0100
fmt.Println(1 << 2) //  4
右移>> 就是除以N次方
1 补码:0001
2 补码:0010
1移2位==> 0000,所以最终是0
fmt.Println(1 >> 2) //  0

4 补码:0100
2 补码:0010
==> 0001 0000
fmt.Println(4 << 2) // 16

你可能感兴趣的:(go 位运算和移位运算)