1. 程式人生 > >原碼、反碼、補碼、移碼之間的關系和轉換

原碼、反碼、補碼、移碼之間的關系和轉換

span 數值 一個 寄存器 如果 有符號數 pan 關系 style

在計算機中參與運算的數有兩大類:無符號數和有符號數。無符號數,即沒有符號的數,在寄存器中的每一位均可用來存放數值;而有符號數,則需要留出位置來存放符號。以機器字長為8位為例,無符號數表示的範圍是0~255,有符號數表示的範圍是-128~+127。

先明白以下的幾個概念:

機器字長:存放數值的寄存器的位數,如8位,16位。

真值:帶有“+”或“-”符號的數稱為真值。

機器數:把符號“數字化”的數稱為機器數。

原碼、反碼、補碼

原碼:一個整數,按照絕對值大小轉換成的二進制數,最高為為符號位,稱為原碼。 紅色為符號位

反碼: 將二進制除符號位數按位取反,所得的新二進制數稱為原二進制數的反碼。 正數的反碼為原碼,負數的反碼是原碼符號位外按位取反。

取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)

正數:正數的反碼與原碼相同。
負數:負數的反碼,符號位為“1”,數值部分按位取反。

比如:將10000000除符號位每一位取反,得11111111。

補碼: 反碼加1稱為補碼。 (如果反碼最後一位是1得話就向前加1)
1. 正數:正數的補碼和原碼相同。
2. 負數:按照規則來
也就是說,要得到一個數的補碼,先得到反碼,然後將反碼加上1,所得數稱為補碼。

原碼、反碼、補碼、移碼之間的關系和轉換