儲存在計算機中的資料,本質都是以二進位製碼來儲存的,而資料當然不能只用來儲存,計算才是它們最重要的用處。原碼、反碼和補碼是資料的三種表示形式,各有各的優點,但只有補碼才是計算機所採用的來儲存和計算資料的形式。
首先來說原碼,原碼就是數字的二進位制表示,在前面加上符號位,正數為0,負數為1。原碼是人腦最為適應和接受的,但是機器用它來計算卻不優。兩個正數相加還可以得到正確的數值,但是做減法(由於計算機只有加法器所以減法需要當成乙個正數加上乙個負數)就會得到錯誤的結果,例如0001-0011=1110(1±3=-5)、0011+1011=1110(3±3=-6)。這看上去是符號位在作怪,又開始了反碼的嘗試。
反碼的表示方法是正數的反碼與原碼一致,負數的除符號位以外全取反。反碼的思想是負數既然是乙個正數的相反數,那麼就把它除了符號位的其他位按位取反來表示。再用反碼來計算1±3就是0001+1100=1101(1101是-2的反碼)就正確了!可是再來算3±3即0011+1100=1111(1111是-0的反碼),出現了-0!然而0的正負並沒有意義,出現+0、-0便是使用反碼計算仍存在的問題,所以又有了補碼。
補碼的表示是正數的補碼與原碼一致,負數的補碼等於反碼+1,但這並不是補碼的定義與思想。補碼的思想細想來很令人驚嘆,是時鐘、經緯度,是乙個圓、乙個輪迴,運用這種思想,可以把減法用加法(不是加上乙個負數那種)來作。比如指向3點的時針,想讓它指向2,有兩種方法,逆時針撥1和順時針撥11(1+11是12,就是表盤的最大容量也被稱為模),這樣來想3-1便與3+11等同,用補碼把減法轉化成加法就是這樣來做的。四位二進位制數的模,即最大容量是2的四次方16,即10000。0011-0001(3-1)相當於0011+1111 (1111=10000-0001),0011+1111=0010(2)這非常正確。再來算0001+1101(1101=10000-0011),得1110是-2的補碼,也沒有問題。這樣我們就知道了,其實負數的補碼是用模減去這個負數的絕對值所對應的原碼得到的那個二進位制數。用補碼再來算3-3(0011+1101=0000)也不再有-0出現了。所以補碼完美的解決了一切計算上因為符號位而導致的問題,成為了計算機中資料儲存和計算的唯一形式。
回顧這一段歷程,原碼、反碼、補碼其實都是因為計算機沒有減法器而為了解決減法的問題引入的,用原碼時想做減法,只好引入了帶來許多麻煩的符號位,而最後是擁有輪迴的智慧型的補碼終於解決了這一切的問題。
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 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進製 的實踐要比二或三進製計數出現的晚.摘...