在理解取反運算之前我們首先的了解什麼是原碼,反碼,補碼。
建議去看這篇文章:轉—原碼,反碼,補碼的深入理解與原理。
我們需要了解:
正數的反碼,補碼都等於原碼,
eg:12 原碼:01100,反碼:01100,補碼:01100
負數的反碼等於(他的原碼除符號位外,按位取反),補碼等反碼加一,eg:-12 原碼:11100,反碼:10011,補碼:10100=反碼(10011)+1
如:~12
首先12轉換成二進位制:1100,再加上符號位就變為了:01100(最高位為符號位),此時01100的補碼為01100
然後對補碼01100帶符號位取反後新的補碼為:10011,可以看到最高位為1,所以取反後的值為負數。
所以此時我們需要計算補碼10011的原碼:
反碼=補碼-1,求得補碼(10011)的反碼為:10010
從而求得原碼:11101,去掉符號位計算1101的值為:13
由於符號位為1,所以~12=-13
同理:求~(-12)
-12的原碼為:11100,補碼為:10100
對補碼10100取反後得到新補碼:01011,符號位為0,所以取反後的值為正數,所以新補碼01011的原碼為01011,而1011=11
所以~(-12)=11
對某個數做取反運算其實是對該數的補碼做取反操作(包括符號位)再求取反後補碼的原碼的值。
也就是:
輸入->(轉化為)原碼->反碼(除符號位外)->補碼->取反操作(包括符號位)->新補碼->新反碼(除符號位外)->新原碼(轉化為十進位制)->輸出
最後將新原碼值求出即可。
其實像大多數人說現在的計算機普遍以補碼的形式表示負數,通過對取反操作的理解,我們是不是可以認為計算機中的數值都是以補碼形式表示。
python 取反操作符( )
誤人子弟呀 誤人子弟,看了幾篇部落格,真的是坑 按位取反運算子 對資料的每個二進位制位取反,即把1變為0,把0變為1 x 類似於 x 1 1 計算依據 正數的原碼 反碼 補碼都是一樣的 負數的補碼為符號位不變,剩餘位取反再加1 原碼求補碼 取反,1 補碼求原碼 取反,1 負數是以補碼儲存的 取反操作...
Python中的操作符
1 操作符介紹 從左到右這些操作符依次是 加 減 乘 傳統除法 浮點除法 取餘,乘方 單斜槓用作傳統除法,雙斜槓用作浮點除法 對結果進行四捨五入 傳統除法是指如果兩個操作都是整型的話,它將執行的是地板除 取比商小的最大整數 而浮點除法是真正的除法,不管運算元是什麼型別,浮點除法總是執行真正的除法。1...
Python中的操作符過載
運算子過載是指在方法中攔截內建的操作 當類的例項出現在內建操作中,python會自動呼叫自定義的辦法,並且返回自定義方法的操作結果。類可以過載python的操作符 操作符過載使我們的物件與內建的一樣。x 的名字的方法是特殊的掛鉤 hook python通過這 種特殊的命名來攔截操作符,以實現過載。p...