Python的按位取反運算符~的簡單解析

Python的按位取反運算符~的解釋是:

對數據的每個二進制位取反,即把1變爲0,把0變爲1。~x 類似於 -x-1。

如a =61= 0b0011 1101,按位取反後的結果是:0b1100 0010=194,

可是Python中運算結果並非如此,

輸出的~a的結果是:~a=62

這是怎麼回事呢?

計算機中的符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位,三種表示方法各不相同。

在計算機系統中,數值一律用補碼來表示和存儲。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。

另外,求負整數的補碼,將其對應正數二進制原碼錶示所有位取反(包括符號位,0變1,1變0)後加1

這裏用括號來表示符號位,0表示正數,1表示負數。

a=61=(0)0b0011 1101,正數補碼

~a=(1)0b1100 0010,負數補碼,符號位爲1表示這個代表一個負數,我們要知道其表示的數值。

對應負數原碼到補碼的轉換過程:

(1)數值部分先減一:0b1100 0001

(2)數值部分取反:0b0011 1110,數值部分62

加上符號則~a =-62= (1)0b0011 1110,負數原碼


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章