官方说明:[link]
解释:如果运算符右侧数值的第 i 位为 1,那么计算结果中的第 i 位为 0;如果运算符右侧数值的第 i 位为 0,那么计算结果中的第 i 位为运算符左侧数值的第 i 位的值。
举例说明
func main() {
x := 11
y := (1 << 0) | (1 << 3) //保证 z 中的第 0 位和第 3 位为 0
z:= x &^ y
fmt.Printf("x = %b\n", x)fmt.Println("\t\t&^")
fmt.Printf("y = %b\n", y)
fmt.Println("————————")
fmt.Printf("z = %04b\n", z)
}
运算结果:
x = 1011 &^ y = 1001 ———————— z = 0010
结果说明:
x = 11 = 1011。由于 y 中的第 0 位和第 3 位为 1,因此 z 中的第 0 位和第 3 位为 0。y 中的第 1 位和第 2 位为 0,因此,z 中第 1 位和第 2 位的值为 x 中第 1 位和第 2 位的值——1 和 0。所以 z 的值为 0010。
运算符作用
保证数值中的某些位一定为 0。
补充其余常见运算符
& 位运算 AND
|位运算 OR
^ 位运算 XOR
&^ 位清空 (AND NOT)
<< 左移
>> 右移