如何將二進制補碼轉換為十進制數


十進制轉二進制補碼

我們知道將十進制數轉換為二進制補碼的方法是:

  • 判斷其是負數還是正數
  • 將其轉換為二進制
  • 如果是正數,那么補碼到此處就求出來了
  • 如果是負數,還需要在保持符號位不變的情況下將其余位取反然后加一

還有一種方法:
假定所需轉換的數字為

\[a_{(10)} \]

下標表示這個數是十進制。如果我們希望用N位二進制表示這個數的補碼,那么該數的補碼為:

\[\text{dec2bin}(2^{N}-|a_{(10)}|) \]

上式中dec2bin表示十進制轉換為二進制,\(|\cdot|\)表示取絕對值。需要注意,N的取值一定要保證能夠表示這個數。

二進制補碼轉十進制

上面是十進制數轉二進制補碼的方式。但是我發現有時候需要將二進制補碼轉換回十進制,后來就發現了這個規律:

設有一個二進制補碼數字\(b_{(2)}\)

  • 保持符號位不變,剩余位取反
  • 加1
  • 轉換為十進制即可

例子

  • 1_111 -> 1_000 -> 1_001 -> -1
  • 1_01010 -> 1_10101 -> 1_10110 -> -22
    驗證一下:\(2^6-22=64-22=42=101010_{(2)}\),可以發現這是正確的。

還有一個方法就是:權重算法:
設一個2進制補碼數據B,共有N位,那么其十進制數為:

\[B_{(10)} =(-1)^{B[N-1]}*2^{N-1} + \sum_{i=0}^{N-2}2^{i}\times B[i] \]

依然利用上面的例子:

  • 1_111 -> \((-1)^{1}*2^{4-1} + 1*2^{0} + 1*2^{1} + 1*2^{2} = -8 + 1 + 2 + 4 = -1\)
  • 1_01010 -> \((-1)^{1}*2^{6-1} + 0*2^{0} + 1*2^{1} + 0*2^{2} + 1*2^{3} + 0*2^{4} = -32 + 0 + 2 + 0 + 8 + 0 = -22\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM