&^ 运算符有什么作用?



根据规范,此操作符称为位清除:

&^   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。)

相关内容

最新更新