Golang运算符&^工作细节

yu *_*ian -3 operators go bitwise-operators

我正在阅读运算符章节中的Golang教程书,上面写着5 &^ 11 = 4,但是这个运算符似乎并不常见,所以我无法立即理解,

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

      5 = 0101
 &^)  11= 1011
 -------------
      4 = 0100
Run Code Online (Sandbox Code Playgroud)

但是我还是不明白,有人可以解释它是如何&^工作的吗?谢谢。

icz*_*cza 5

规范中提到:算术运算符:

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

因此,它计算第一个操作数的AND连接和第二个操作数的取反值。

它的名称“位清除”来自它的作用。检查是否使用了两个1位值:如果第二个操作数是1,则意味着要“清除”:结果将0与第一个操作数无关。如果第二个操作数是0,则表示不清除,结果将是第一个操作数。

卡诺地图为:

A | B | A &^ B = A AND NOT(B)
--+---+----------------------
0 | 0 |   0
0 | 1 |   0
1 | 0 |   1
1 | 1 |   0
Run Code Online (Sandbox Code Playgroud)

当整数使用的,操作被执行逐位,也就是将要使用的结果的第0位&^上的第一数目和所述第二数目的第0位; 结果的第一位将用于&^第一位数字的第一位和第二位等。

因此,基本上,结果A &^ B将是A通过清除(以的二进制表示形式)中0由1标记的位(将其设置为)得出的数字。BB

  • @yuyangJian我们大多数人都不是CS的毕业生。 (2认同)