有没有一种算法可以手动将两者的十六进制补码转换为十进制?



假设我有十六进制 A41B 的两个补码形式,我想将其转换为十进制。通常,我会将其转换为二进制,翻转所有位,添加一个,然后将其转换为十进制并输入正确的符号(正号或负号)。有没有更快的手动方法?

您可以:

  • 将其转换为十进制
  • 从结果中减去 2N,其中 N 是您的字大小(例如,对于 16 位字,减去 65536)

在您的示例中,

0xA41B = 42011
42011 - 65536 = -23525

在进行减法之前,您需要检查符号位是否实际上是 1。否则,你只会有一个正数。

从戴夫的角落:

=MOD(HEX2DEC(A7)+2^15,2^16)-2^15

对于 16 位数字。

如果您出于某种原因不想或无法执行其他答案建议的减法,您可以像这样处理负数:

  1. 翻转位
  2. 添加一个
  3. 转换为十进制,就好像数字是正数一样
  4. 添加负号

例如:-5 在 8 位 2 的补码中11111011。翻转位并加一个是00000101,十进制为 5。添加负号,你有 -5。

最新更新