根据规范,此操作符称为位清除:
&^ bit clear (AND NOT) integers
我以前从未听说过这样的操作符,我想知道它为什么有用。
似乎取左操作数并禁用右操作数中打开的所有位。对操作者有正式的描述吗?我注意到的另一件事是它不是可交换的。与^
比较的伪代码:
11110 &^ 100 //11010
11110 ^ 100 //11010
11110 &^ 0 //11110
11110 ^ 0 //11110
11110 &^ 11110 //0
11110 ^ 11110 //0
11110 &^ 111 //11000
11110 ^ 111 //11001
111 &^ 11110 //1
111 ^ 11110 //11001
从符号(&
和^
的连接),名称"而不是"(以及术语"bit clear",听起来像"bit set"的对立面),似乎很明显A &^ B
正在做A & ^B
(其中^
是按位逆)。
这是通过检查运算符的真值表来支持的:
fmt.Println(0 &^ 0); // 0
fmt.Println(0 &^ 1); // 0
fmt.Println(1 &^ 0); // 1
fmt.Println(1 &^ 1); // 0
(见http://ideone.com/s4Pfe9。)