1. 程式人生 > 其它 >python 原碼,反碼,補碼

python 原碼,反碼,補碼

python 原碼,反碼,補碼

一、 機器數和真值

1.1 機器數

機器數:一個數在計算機中的二進位制表示形式

  • 機器數帶符號,在計算機用一個數的最高位存放符號,正數為0,負數為1

  • 例如: 十進位制中的數 +3 ,計算機字長為8位,轉換成二進位制就是00000011。如果是 -3 ,就是 10000011

    其中,00000011 和 10000011就是機器數

1.2 真值

真值:將帶符號位的機器數對應的真正數值稱為機器數的真值。

  • 例如:0000 0001的真值 = +000 0001 = +1 1000 0001的真值 = –000 0001 = –1

二、原碼,反碼,補碼

在探求為何機器要使用補碼之前, 讓我們先了解原碼, 反碼和補碼的概念.

對於一個數, 計算機要使用一定的編碼方式進行儲存. 原碼, 反碼, 補碼是機器儲存一個具體數字的編碼方式

.

2.1 原碼

原碼就是符號位加上真值的絕對值

即用第一位表示符號, 其餘位表示值.

例如:如果是8位二進位制,那麼

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符號位. 因為第一位是符號位, 所以8位二進位制數的取值範圍就是:

[1111 1111 , 0111 1111]

[-127 , 127]

原碼在展示上是與機器數相同的

2.2 反碼

反碼的表示方法是:

  • 正數的反碼是其本身

  • 負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

3. 補碼

補碼的表示方法是:

  • 正數的補碼就是其本身

  • 負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]補

[-1] = [10000001]原 = [11111110]反 = [11111111]補

對於負數, 補碼錶示方式也是人腦無法直觀看出其數值的. 通常也需要轉換成原碼在計算其數值.

三、為何要使用原碼, 反碼和補碼

待更新https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

四、 python實現

不管n是正數還是負數,只需要

bin(n & 0xFFFFFFFF)

就可得到n的補碼

參考文章