对 16 位信号 (Python) 运算符进行按位补码 ^
Doing bitwise complement on a 16-bit signal (Python) operator ^
小问题,我正在尝试对 16 位长的信号进行按位补码 (NOT)。在文档的 Python 中,我天真地认为执行以下操作会起作用:
~ x
令我惊讶的是这个 returns 负数。我在聊天中询问,他们告诉我使用:
x ^ 65535
我仍然不明白为什么会这样。
为什么这样做有效?
~x
反转 x 的所有位,包括其符号位。 x ^ 65535
仅反转 x 的低 16 位。
^
表示按位异或运算。单个位 a XOR b 的真相 table 是:
a b | a^b
---------
0 0 | 0
0 1 | 1 <-
1 0 | 1
1 1 | 0 <-
XOR 有一个有趣的 属性 即 a ^ 0 = a
(恒等式)和 a ^ 1 = not a
(反转)。您可以在上面 table.
的 <-
行中看到这一点
那么x ^ 65535
(或更清楚的x ^ 0xffff
)所做的是将低16位与16位按位异或以仅反转低16位(0xffff == 65535是16位) .所以对于一个 32 位的例子:
xxxx xxxx xxxx xxxx aaaa aaaa aaaa aaaa
xor 0000 0000 0000 0000 1111 1111 1111 1111
----------------------------------------------
xxxx xxxx xxxx xxxx AAAA AAAA AAAA AAAA (where A is ~a)
x 表示在输入和结果中保持相同的位。 A 表示已反转的位。
顺便说一句:做同样事情的另一种方法是:
~x & 0xffff
小问题,我正在尝试对 16 位长的信号进行按位补码 (NOT)。在文档的 Python 中,我天真地认为执行以下操作会起作用:
~ x
令我惊讶的是这个 returns 负数。我在聊天中询问,他们告诉我使用:
x ^ 65535
我仍然不明白为什么会这样。
为什么这样做有效?
~x
反转 x 的所有位,包括其符号位。 x ^ 65535
仅反转 x 的低 16 位。
^
表示按位异或运算。单个位 a XOR b 的真相 table 是:
a b | a^b
---------
0 0 | 0
0 1 | 1 <-
1 0 | 1
1 1 | 0 <-
XOR 有一个有趣的 属性 即 a ^ 0 = a
(恒等式)和 a ^ 1 = not a
(反转)。您可以在上面 table.
<-
行中看到这一点
那么x ^ 65535
(或更清楚的x ^ 0xffff
)所做的是将低16位与16位按位异或以仅反转低16位(0xffff == 65535是16位) .所以对于一个 32 位的例子:
xxxx xxxx xxxx xxxx aaaa aaaa aaaa aaaa
xor 0000 0000 0000 0000 1111 1111 1111 1111
----------------------------------------------
xxxx xxxx xxxx xxxx AAAA AAAA AAAA AAAA (where A is ~a)
x 表示在输入和结果中保持相同的位。 A 表示已反转的位。
顺便说一句:做同样事情的另一种方法是:
~x & 0xffff