& 位運算 AND | 位運算 OR ^ 位運算 XOR &^ 位清空 (AND NOT) << 左移 >> 右移
感受位運算操做符雖然在平時用得並很少,可是在涉及到底層性能優化或者使用某些trick的時候仍是比較有意思。編程
&(AND) |(OR) 就不提了最經常使用的東西 會編程就會。性能優化
&操做的話是當 兩個數須要同時爲1的時候纔會保留。 例如 0000 0100 & 0000 1111 => 0000 0100 => 4性能
| 操做的話是當 兩個數同時爲1或者1個爲1一個不爲1的時候會保留。 例如 0000 0100 | 0000 1111 => 0000 1111 => 15優化
^(XOR) 在go語言中XOR是做爲二元運算符存在的:spa
可是若是是做爲一元運算符出現,他的意思是按位取反,例如code
package main import "fmt" func main() { x := 4 fmt.Println(^x) }
output: -5
若是做爲二元運算符則是blog
package main import "fmt" func main() { x := 4 y := 2 fmt.Println(x^y) }
output: 6
XOR是不進位加法計算,也就是異或計算。0000 0100 + 0000 0010 = 0000 0110 = 6it
&^ (AND NOT)位清空運算和被運算變量位置有關係,先看一個例子:class
package main import "fmt" func main() { x := 2 y := 4 fmt.Println(x&^y) }
output: 2
計算x&^y 首先咱們先換算成2進制 0000 0010 &^ 0000 0100 = 0000 0010 若是ybit位上的數是0則取x上對應位置的值, 若是ybit位上爲1則取結果位上取0import
>>右移 <<左移 感受右移左移應該也是很是常見的使用了 繼續看例子:
package main import "fmt" func main() { x := 2 y := 4 fmt.Println(x<<1) fmt.Println(y>>1) }
output:4 2
進行轉化爲二進制 而後向左或者向右移動。