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

Luc*_*nis 1 binary hex

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

Gre*_*ill 5

你可以:

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

在你的例子中,

0xA41B = 42011
42011 - 65536 = -23525
Run Code Online (Sandbox Code Playgroud)

在进行减法之前,您需要检查符号位是否确实为 1。否则您将得到一个正数。