Golang 运算符 &^ 工作细节

Golang operator &^ working detail

我在看Golang教程的运算符章节,上面写着5 &^ 11 = 4,但是这个运算符好像不是很常用,所以一时看不懂,

我尝试通过列出三个数的二进制形式来猜测其逻辑:

      5 = 0101
 &^)  11= 1011
 -------------
      4 = 0100

但是我还是没看懂,谁能解释一下&^是怎么工作的?谢谢。

Spec: Arithmetic operators:

中提到
&^   bit clear (AND NOT)

所以它计算第一个操作数的AND连接和第二个操作数的取反值。

它的名字"bit clear"来自于它的作用。检查在两个 1 位值上使用它:如果第二个操作数是 1,则意味着 "clear":无论第一个操作数是什么,结果都将是 0。如果第二个操作数为0,则表示不清除,结果为第一个操作数

它的Karnaugh-map是:

A | B | A &^ B = A AND NOT(B)
--+---+----------------------
0 | 0 |   0
0 | 1 |   0
1 | 0 |   1
1 | 1 |   0

当用于整数时,运算是按位进行的,即结果的第0位将在第0位上使用&^第一个数字和第二个数字;结果的第一位将在第一个数字的第一位和第二个数字等上使用 &^...

所以基本上 A &^ B 的结果将是通过清除 B 中标记的位(将它们设置为 0)从 A 派生的数字(在 B 的二进制表示中)。

它不会把第二个操作数接起来。这和关闭钻头是一样的。

     5 = 0101
&^   11= 1011
-------------
     0101
&    0100
-------------
     0100