簡體   English   中英

對16位信號(Python)運算符進行按位補碼^

[英]Doing bitwise complement on a 16-bit signal (Python) operator ^

小問題,我正在嘗試對16位長的信號進行按位補碼(NOT)。 在文檔中的Python中,我天真地認為可以執行以下操作:

~ x

令我驚訝的是,它返回負數。 我在聊天中詢問,他們告訴我使用:

x ^ 65535

我仍然不明白的是為什么這行得通。

為什么這樣做?

〜x反轉~x所有位,包括其符號位。 x ^ 65535僅反轉x ^ 65535的低16位。

^表示按位XOR運算。 某位異或b的真值表為:

a b | a^b
---------
0 0 | 0
0 1 | 1    <-
1 0 | 1
1 1 | 0    <-

XOR具有一個有趣的特性,即a ^ 0 = a (同一性),而a ^ 1 = not a (倒置)。 您可以在上表的<-行中看到它。

因此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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM