假设我有十六进制 A41B 的两个补码形式,我想将其转换为十进制。通常,我会将其转换为二进制,翻转所有位,添加一个,然后将其转换为十进制并输入正确的符号(正号或负号)。有没有更快的手动方法?
您可以:
- 将其转换为十进制
- 从结果中减去 2N,其中 N 是您的字大小(例如,对于 16 位字,减去 65536)
在您的示例中,
0xA41B = 42011
42011 - 65536 = -23525
在进行减法之前,您需要检查符号位是否实际上是 1。否则,你只会有一个正数。
从戴夫的角落:
=MOD(HEX2DEC(A7)+2^15,2^16)-2^15
对于 16 位数字。
如果您出于某种原因不想或无法执行其他答案建议的减法,您可以像这样处理负数:
- 翻转位
- 添加一个
- 转换为十进制,就好像数字是正数一样
- 添加负号
例如:-5 在 8 位 2 的补码中11111011
。翻转位并加一个是00000101
,十进制为 5。添加负号,你有 -5。