標籤:

原碼、反碼與補碼

  • 原碼就是帶一位符號位的二進位代碼
  • 反碼
  1. 正數的反碼和原碼相同
  2. 負數的反碼是除符號位各位求反
  • 補碼
  1. 正數的補碼和原碼相同
  2. 負數的補碼是反碼加一

還有一種記憶方法

反碼

  • 負數的反碼即為該計數系統所能夠表示最大值減去負數的模(負數除去符號位),例如:

-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:計算機 |