Golang 运算符 &^ 工作细节

标签 go operators bitwise-operators

我在看一本Golang教程书的operator章节,上面写着5 &^ 11 = 4,但是这个operator好像不太常见,所以我不能马上理解,

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

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

但是我还是不明白,谁能解释一下&^是如何工作的?谢谢。

最佳答案

它在 Spec: Arithmetic operators: 中提到

&^   bit clear (AND NOT)

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

它的名字“bit clear”来自于它的作用。检查在两个 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

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

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

关于Golang 运算符 &^ 工作细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48164174/

相关文章:

vb6 - Visual Basic 6.0 中的运算符优先顺序是什么?

list - 如何可靠地比较列表的整数或浮点值?

c - C 中的按位运算 : Can't figure out why XOR does not work. 我的代码或逻辑是否有缺陷?

javascript - 使用按位运算符(JSFeat)修改图像像素

c - 在这种情况下 && 和 & 有什么不同?

go - 在 go 中创建一片接口(interface)片

MySQL 错误 1064 : search query not working as expected

go - 试图找到这个 perl 数组的 golang 等价物

json - 如何为一个端点创建多种验证方法?

php - 3个不同的等于