我无法真正google这个名字而不是得到任何有用的结果,这个运算符究竟是什么,我怎么能用像C这样的语言呢?我查看了规范,但没有任何帮助,只有一个列表说明了&^
(和非)。
答案 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的对应位。
示例:
package main
import "fmt"
func main(){
var x uint8 = 1
var y uint8 = 1 << 2
fmt.Printf("%08b\n", x &^ y);
}
结果:
00000001