&^运算符有什么作用?

sho*_*one 5 bit-manipulation go

根据规范,这个运算符被称为bit clear:

&^   bit clear (AND NOT)    integers
Run Code Online (Sandbox Code Playgroud)

我以前从未听说过这样的操作员,我想知道它为什么有用.

它似乎采用左操作数并禁用右操作数中打开的所有位.是否有关于运营商的正式描述?我注意到的另一件事是它不是可交换的.Pococode与comarison ^:

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
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 6

从符号(的串联&^),名字"而不是"(以及术语"位清零"听起来很像"位设置"的对面),它似乎很明显的是A &^ B在做A & ^B(其中^是按位取反) .

通过检查运算符的真值表来备份:

fmt.Println(0 &^ 0);    // 0
fmt.Println(0 &^ 1);    // 0
fmt.Println(1 &^ 0);    // 1
fmt.Println(1 &^ 1);    // 0
Run Code Online (Sandbox Code Playgroud)

(见http://ideone.com/s4Pfe9.)

  • @OliCharlesworth(^ 1)是一个无类型的int常量,等于-2,因此`uint(11)&(^ 1)`不是有效的表达式,因为-2不是有效的unsigned int(并且没有隐式类型)在转的过程中).换句话说,这是一种使用常数很好地清晰播放的方法. (3认同)