我在看一本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/