【问题标题】:Trouble understanding an exercise given the two's complement in hex format to convert into decimal format鉴于十六进制格式的二进制补码转换为十进制格式,无法理解练习
【发布时间】:2014-11-11 04:11:46
【问题描述】:

我正在尝试将以下十六进制值的二进制补码转换为十进制值:

23、57、94 和 87。

a) 23

过程:(3 x 16^0) + (2 x 16^1) -> (3) + (32) = 35(正确)

b) 57

过程:(7 x 16^0) + (5 x 16^1) -> (7) + (80) = 87(正确)

对于 94 和 87,正确的值分别是 -108 和 -121。

如果我按照用于数字 a) 和 b) 的程序进行操作,我会得到 148 和 128 对应 94 和 87。

由于我的错误,有人可以向我解释如何获得正确的结果吗?我需要先将字节转换为二进制,然后再从那里继续吗?

提前非常感谢!

【问题讨论】:

    标签: binary decimal hex twos-complement


    【解决方案1】:

    0x94 = 0b10010100

    现在您可以将它转换为十进制数,就像它是一个普通的二进制数一样,除了 MSB 计数为负:

    1 * -2^7 + 0 * 2^6 + 0 * 2^5 + 1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 =
    -2^7 + 2^4 + 2^2 =
    -128 + 16 + 4 =
    -108
    

    其他号码的工作方式类似

    【讨论】:

      【解决方案2】:

      先写下十六进制值的二进制表示:

      94h = 10010100b

      要取二进制补码,你翻转所有位并添加 00000001b,所以这个二进制字符串的二进制补码是

      01101011b + 00000001b = 01101100b

      那么第一位被解释为符号(本例中为负号),其余7位构成幅度,所以:

      01101100b = -108d

      其他的工作类似。

      【讨论】:

        猜你喜欢
        • 2010-10-15
        • 2014-04-16
        • 1970-01-01
        • 1970-01-01
        • 2019-11-29
        • 1970-01-01
        • 2014-03-01
        • 2022-07-08
        • 2014-02-06
        相关资源
        最近更新 更多