我在操作员章节阅读了Golang教程书,它说5 &^ 11 = 4
,但是这个操作符似乎并不常见,所以我无法立即理解,
我试着通过列出三个数字的二进制形式来猜测它的逻辑:
5 = 0101
&^) 11= 1011
-------------
4 = 0100
但我仍然无法理解,有人可以解释&^
的工作原理吗?谢谢。
答案 0 :(得分:5)
&^ 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
中标记的位(设置为B
) B
的二进制表示。)
答案 1 :(得分:0)
它不会是第二个操作数和它们。这就像离开这些位一样。
5 = 0101
&^ 11= 1011
-------------
0101
& 0100
-------------
0100