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

进行转化为二进制 而后向左或者向右移动。

相关文章
相关标签/搜索