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是作為二元運算符存在的:

但是如果是作為一元運算符出現,他的意思是按位取反,例如

package main

import "fmt"

func main() {
    x := 4
    fmt.Println(^x)
}
output: -5

如果作為二元運算符則是

package main

import "fmt"

func main() {
    x := 4
    y := 2
    fmt.Println(x^y)
}
output: 6

XOR是不進位加法計算,也就是異或計算。0000 0100 + 0000 0010 = 0000 0110 = 6

 

 &^ (AND NOT)位清空運算和被運算變量位置有關系,先看一個例子:

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則取結果位上取0

 

>>右移 <<左移 感覺右移左移應該也是非常常見的使用了 繼續看例子:

package main

import "fmt"

func main() {
    x := 2
    y := 4
    fmt.Println(x<<1)
    fmt.Println(y>>1)
}
output:4 2

進行轉化為二進制 然后向左或者向右移動。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM