【问题标题】:Is there an algorithm to manually convert the two's complement of hexadecimal to decimal?是否有一种算法可以手动将十六进制的二进制补码转换为十进制?
【发布时间】:2023-04-09 23:35:02
【问题描述】:

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

【问题讨论】:

  • 这与将“普通”十六进制转换为十进制相同,只是您必须考虑到如果最高有效位 >= 8,则需要从中减去 2^16结果。

标签: binary hex


【解决方案1】:

你可以:

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

在你的例子中,

0xA41B = 42011
42011 - 65536 = -23525

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

【讨论】:

    【解决方案2】:

    来自dave's corner

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

    对于 16 位数字。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-04-16
        • 2014-03-01
        • 2011-09-03
        • 1970-01-01
        • 2012-06-26
        • 2013-09-28
        • 2016-05-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多