計算機中二進位制原碼、反碼、補碼的計算
阿新 • • 發佈:2019-01-01
計算機中原碼、反碼、補碼
正數的 原碼 = 反碼 = 補碼
負數 反碼 = 數的絕對值按位取反(最高位符號位除外)
補碼 = 反碼 +1
已知負數補碼求原碼
補碼取反(最高位符號位不取反)+1 = 原碼 (負數補碼的補碼=原碼)*取反的時候,最高位符號位不取反
最高位 符號位也要進位,進位後溢位
本文談論的都為有符號數。
這得從二進位制的原碼說起:
二進位制原碼最大為0111111111111111=215-1=32767
二進位制原碼最小為1111111111111111=-(215-1)=-32767
正0和負0:0000000000000000=1000000000000000=0
所以,二進位制原碼錶示時,範圍是-32767~-0
但是計算機中採用二進位制補碼儲存資料。
正數編碼不變,從0000000000000000到0111111111111111依舊錶示0到32767
負數需要把除符號位以後的部分取反加1,即-32767的補碼為1000000000000001。到此,再來看原碼的正0和負0:0000000000000000和1000000000000000,補碼錶示中,前者的補碼還是0000000000000000,後者經過非符號位取反加1後,同樣變成了0000000000000000,也就是正0和負0在補碼系統中的編碼是一樣的。但是,我們知道,16位二進位制數可以表示216個編碼,而在補碼中零的編碼只有一個,也就是補碼中會比原碼多一個編碼出來,這個編碼就是1000000000000000,因為任何一個原碼都不可能在轉成補碼時變成