Ray Wang

Ray Wang

twitter

原碼、反碼及補碼

首先,計算機中所有的數據都是以二進制存儲的(非 0 即 1),包括正負數的符號也只能用 0 或 1 來表示,所以二進制的最高位如果是 0 表示正數,如果是 1 則表示負數

使用原碼計算#

假設有數值 2 和 -2 如下所示:

  • +2 的原碼為 0000_0010
  • -2 的原碼為 1000_0010

假設要進行 2 + (-2) 計算

0000_0010 + 1000_0010 = 1000_0100 (十進制的 -4)

顯然上面的計算結果不是想要的結果

使用反碼計算#

為了解決上面問題,引入 反碼

反碼:正數反碼原碼相同,負數反碼除符號位不變,其他位取反

  • +2 的反碼 0000_0010
  • -2 的反碼 1111_1101

再進行 2 + (-2) 計算

0000_0010 + 1111_1101 = 1111_1111
上面的計算結果 1111_1111 是反碼,轉成原碼為 1000_0000 也就是十進制 -0

綜上,可以看出使用 反碼 出現了 +0-0 的問題

使用補碼計算#

在反碼的基礎上引入 補碼

補碼:正數的補碼等於 原碼,負數的補碼是在 反碼 的基礎上 加 1

  • +2 的補碼 0000_0010
  • -2 的補碼 1111_1110

再進行 2 + (-2) 計算

0000_0010 + 1111_1110 = 0000_0000
上述結果正是需要的結果,所以計算機中使用補碼來進行計算

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。