什么是"& ^" golang中的运算符?

时间:2015-12-25 02:10:24

标签: go bit-manipulation

我无法真正google这个名字而不是得到任何有用的结果,这个运算符究竟是什么,我怎么能用像C这样的语言呢?我查看了规范,但没有任何帮助,只有一个列表说明了&^(和非)。

2 个答案:

答案 0 :(得分:18)

Go表达式x &^ y的C等价物只是x & ~y。这实际上是“x AND(按位而非y)”。

arithmetic operators section of the spec中描述&^作为“清楚”的操作,它可以让您了解您想要使用它的内容。作为两个单独的操作,~y将每一位转换为零,然后将清除x中的相应位。每个零位将转换为1,这将保留x中的相应位。

因此,如果您认为x | y是基于掩码常量x打开y的某些位的方法,那么x &^ y正在执行相反的操作并转那些相同的东西。

答案 1 :(得分:1)

  

&^运算符很清楚(并且不是):在表达式z = x&^ y中,   如果y的对应位为1,则z的每个位均为0;否则   等于x的对应位。

来自The Go Programming Language

示例:

package main
import "fmt"

func main(){
    var x uint8 = 1
    var y uint8 = 1 << 2

    fmt.Printf("%08b\n", x &^ y);

}  

结果:

  

00000001