原碼 反碼 補碼新解

2021-09-16 18:56:33 字數 1159 閱讀 8027

世界上有10中人,一種懂二進位制,一種不懂二進位制。我們習慣了十進位制計數,乍看到二進位制,有點彆扭,認識後慢慢發現它的神奇:有點一生二,二生萬物的意思。十進位制和二進位制的部分對應關係如下:

小範圍的十進位制運算,我們操練起來麻麻溜溜的,二進位制的運算相信你也不差,然,碰到十進位制轉二進位制的運算就有點矇圈了。

計算機 cpu 的運算器只實現了加法器,沒有實現減法器。但,我們可以通過加上乙個負數來實現減法運算。

如果你試著將3-2這個十進位制運算轉換成二進位制運算進行計算,你就會發現,簡單的翻譯式計算結果不對啊,怎麼能是-5(有符號數最高位1表示負,反之代表正)?

有朋友或許會嗤笑:應該把負數轉換成對應的補碼進行計算。相信你也對下面這幾個概念耳熟能詳。

負數為什麼有這麼多彎彎道道?從前面的3-2這個例子中,我們可以看到,簡單翻譯成原碼計算有可能得到錯誤的結果。我們知道乙個限定n位的二進位制有符號數,表示的範圍是-2n-1~2n-1-1,對於最大值2n-1-1,如果加上1,就會發生溢位(最高位是1,其它位為0,表示的是-2n-1),從最大變成了最小。這給了我們乙個提醒,是否可以通過溢位來達到減法的目的?

研究發現,計算機資料的溢位,相當於取模。取模的除數就是數值表示範圍的上限減去下限:2n-1-1-(-2n-1) +1=2n-1+1。這是乙個步長,你會發現,無論正數或負數加上這個步長溢位後,還是它本身(n+1位置上是1,其它位置為0,n+1為溢位位)。

我們將開始的3-2變換為3-2+2n-1+1,再變換一下順序得到:3+((2n-1-2)+1)。(2n-1-2)表示如下:

細心的你發現(2n-1-2)就是-2的反碼(原碼符號位不變,其他位取反),((2n-1-2)+1)就是-2補碼(反碼+1),顯然,3-2等於3+(-2的補碼)是合理的。

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...

原碼 反碼 補碼

數值在計算機中表示形式為機器數 計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的 是十進位制,正如亞里斯多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手 指頭這個解剖學事實的結果.儘管在歷史上手指計數 5,10進製 的實踐要比二或三進製計數出現的晚.摘...