Golang的位運算操做符的使用

 

&      位運算 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

進行轉化爲二進制 而後向左或者向右移動。

相關文章
相關標籤/搜索