1. 原碼、反碼、補碼三者之間的關係
計算機中的數值是以二進制碼的方式存儲的,而且是以補碼的方式存儲的,數值的運算也是以補碼的形式進行運算。我們通常看到的數值一般是十進制數,可以簡單地理解爲計算機將補碼轉換成原碼,然後再將原碼轉換成十進制顯示出來。
原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值。
正數的反碼是其本身,負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反
正數的補碼就是其本身,負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
正數:[+1] = [00000001]原 = [00000001]反 = [00000001]補
負數:
[-1]原 = 10000001
[-1]反 = 11111110
[-1]補 = 11111111
2. Python中按位取反(~)運算符的計算過程
計算機中的數值是以補碼存儲的
① Python中對正數按位取反:~1 = -2
[+1]原 = [+1]反 = [+1]補 = 0 0001
計算機中存儲的時 0 0001,是正數1
按位取反:1 1110
1 1110的反碼: [1 1110]反 = [1 0001]
末位加一:1 0010,即爲-2
② Python中對負數按位取反:~-2 = 1
[-2]原 = 1 0010
[-2]反 = 1 1101
[-2]補 = 1 1110
計算機中存儲的是 1 1110,是負數 -14
按位取反:0 0001
正數的反碼和補碼相同,即爲1
總結,簡單的記憶方法:~a = - (a + 1)