Golang 运算符 &^ 工作细节
Golang operator &^ working detail
我在看Golang教程的运算符章节,上面写着5 &^ 11 = 4
,但是这个运算符好像不是很常用,所以一时看不懂,
我尝试通过列出三个数的二进制形式来猜测其逻辑:
5 = 0101
&^) 11= 1011
-------------
4 = 0100
但是我还是没看懂,谁能解释一下&^
是怎么工作的?谢谢。
中提到
&^ bit clear (AND NOT)
所以它计算第一个操作数的AND连接和第二个操作数的取反值。
它的名字"bit clear"来自于它的作用。检查在两个 1 位值上使用它:如果第二个操作数是 1
,则意味着 "clear":无论第一个操作数是什么,结果都将是 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
的结果将是通过清除 B
中标记的位(将它们设置为 0
)从 A
派生的数字(在 B
的二进制表示中)。
它不会把第二个操作数接起来。这和关闭钻头是一样的。
5 = 0101
&^ 11= 1011
-------------
0101
& 0100
-------------
0100
我在看Golang教程的运算符章节,上面写着5 &^ 11 = 4
,但是这个运算符好像不是很常用,所以一时看不懂,
我尝试通过列出三个数的二进制形式来猜测其逻辑:
5 = 0101
&^) 11= 1011
-------------
4 = 0100
但是我还是没看懂,谁能解释一下&^
是怎么工作的?谢谢。
&^ bit clear (AND NOT)
所以它计算第一个操作数的AND连接和第二个操作数的取反值。
它的名字"bit clear"来自于它的作用。检查在两个 1 位值上使用它:如果第二个操作数是 1
,则意味着 "clear":无论第一个操作数是什么,结果都将是 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
的结果将是通过清除 B
中标记的位(将它们设置为 0
)从 A
派生的数字(在 B
的二进制表示中)。
它不会把第二个操作数接起来。这和关闭钻头是一样的。
5 = 0101
&^ 11= 1011
-------------
0101
& 0100
-------------
0100