原碼、反碼與補碼
- 原碼就是帶一位符號位的二進位代碼
- 反碼
- 正數的反碼和原碼相同
- 負數的反碼是除符號位各位求反
- 補碼
- 正數的補碼和原碼相同
- 負數的補碼是反碼加一
還有一種記憶方法
反碼
- 負數的反碼即為該計數系統所能夠表示最大值減去負數的模(負數除去符號位),例如:
-3 = 1011(原碼)= 1100(反碼)
- 而該計數系統表示最大值為1111
(-3的反碼)1100 = 1111-011(-3原碼非符號位即-3的模)
- 觀察便發現這就是過程中所說的除符號位各位取反。
補碼
- 負數的補碼即為該計數系統的容量減去負數的模(除去符號位),例如
-3 = 1011(原碼)=1101(反碼)
- 而該計數系統的容量為16(-8~7)
(-3的補碼)1101=10000-011(-3原碼非符號位即-3的模)
- 觀察便發現
(-3的補碼)1101=10000-011(-3原碼非符號位即-3的模)
=1111+1-011
顯然就是所謂的反碼加一
討論原理
我們先簡單考慮結果只有正數的情況。想像一個類似鐘錶的錶盤,區別在於擁有16個刻度而不是12個(這裡多少個刻度無關緊要,只是為了對接4位二進位數才把12換成16)。
- 考慮減法 6 - 3 = 3
思考這裡,相當於將在6位置的錶針向逆時針撥回三格,可以考慮另一種做法,將錶針向順時針撥動13(16 - 3)格。顯然這是可行的,也就是說得到了相同的結果。
換用算式表示 6 - 3 變為 6 + (16 - 3)
但是發現,變化之後的計算結果為13。不妨將13定義為-3
- 接下來便考慮另一個算式 3 - 6 = - 3
按照上面的思路換減法為加法,3 - 6 = 3 + (16 - 6) = 13
按照我們上面的規定,13定義為了- 3,剛好是正確的結果。我們就是利用這個循環的原理,通過減小系統能夠表示的最大值,來完成轉減法為加法的過程。這個過程有利於計算機的電路設計。
- 仔細觀察變減法為加法的過程,正是求補的過程,而負數的補碼也就確定了下來。
推薦閱讀:
※碧藍航線這個遊戲怎麼樣啊?
※從開掛與硬體廠商的狂歡看 一款遊戲的影響到底有多大?
※怎樣學好計算機?
※如何看待IBM宣布成功研製50量子比特量子計算機原型機?
※電腦分期付款是什麼?
TAG:計算機 |