2014-02-09 103 views
1

比方說,我有十六進制A41B的二進制補碼形式,我想將它轉換爲十進制。通常,我會將其轉換爲二進制,翻轉所有位,添加一個,然後將其轉換爲十進制,並輸入正確的符號(正值或負值)。手動操作有更快的方法嗎?有沒有一種算法來手動將二進制的十六進制補碼轉換爲十進制數?

+0

這與將「正常」十六進制轉換爲十進制數據相同,除了必須考慮到如果最高有效位數> = 8,則需要從結果中減去2^16。 –

回答

3

您可以:

  • 將其轉換爲十進制
  • 減去2 n的結果,其中N是你的字大小(例如,16位字,減65536)

在你的榜樣,

0xA41B = 42011 
42011 - 65536 = -23525 

之前做減法,你會檢查符號位實際上是1.否則,你只會有一個正數。

0

如果出於某種原因不願或不能執行減法,其他答案建議,你可以把負數是這樣的:

  1. 翻轉位
  2. 添加一個
  3. 轉換爲十進制彷彿數分別爲正
  4. 添加負號

例如:-5是11111011採用8位2的補碼。翻轉這些位並添加一個是00000101,它是十進制的5。添加負號,你有-5。

相關問題