Golang运算符& ^工作细节

时间:2018-01-09 08:36:20

标签: go operators bitwise-operators

我在操作员章节阅读了Golang教程书,它说5 &^ 11 = 4,但是这个操作符似乎并不常见,所以我无法立即理解,

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

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

但我仍然无法理解,有人可以解释&^的工作原理吗?谢谢。

2 个答案:

答案 0 :(得分:5)

Spec: Arithmetic operators:

中提到过
&^   bit clear (AND NOT)

因此它计算第一个操作数的AND连接和第二个操作数的否定值。

它的名字“有点清楚”来自它的作用。在两个1位值上检查使用它:如果第二个操作数是1,则表示“清除”:无论第一个操作数是什么,结果都是0。如果第二个操作数是0,则表示不清除,结果将是第一个操作数。

Karnaugh-map是:

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

当在整数上使用时,操作按 bit-wise 执行,即结果的第0位将在第一个数字的第0位使用&^并且第二个数字;结果的第1位将使用&^在第一个数字的第1位和第二个数字等...

所以基本上A &^ B的结果将是从A中得到的数字,方法是清除0中标记的位(设置为BB的二进制表示。)

答案 1 :(得分:0)

它不会是第二个操作数和它们。这就像离开这些位一样。

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