& ^运算符有什么作用?

时间:2014-06-01 11:01:39

标签: go bit-manipulation

根据specification,此运算符被称为位清除:

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

1 个答案:

答案 0 :(得分:6)

从符号(&^的串联),名称“而不是”(以及“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。)