【问题标题】:How to calculate decimal and hex values of one and two's complmement binary representation?如何计算一和二的补码二进制表示的十进制和十六进制值?
【发布时间】:2009-12-05 14:19:07
【问题描述】:

例如,假设初始值为:

0100 0011

如果使用二进制补码,十六进制是什么,十进制是什么?

同样,如果使用补码,十六进制和十进制是什么?

更一般地说,您如何计算出这两种二进制表示形式的十六进制和十进制值?

【问题讨论】:

    标签: binary


    【解决方案1】:

    十六进制很容易。只需分成 4 位组并将每个组转换为十进制。然后,很明显,用 A 替换 10,用 B 替换 11,用 C 替换 12,用 D 替换 13,用 E 替换 14,用 F 替换 15。十六进制表示通常不关心一或二的补码,而只是精确地反映位。

    关于转换成十进制:根据是一或二的补码,算出符号和绝对值是什么。如果第一位为0,则为正,如果为1,则为负。

    正值不需要进一步修改。负值的绝对值取决于它是 1 的补码还是 2 的补码。一个补码就是取反位(0 变为 1,1 变为 0)。对于二进制补码减 1 然后取反。

    然后将绝对值中设置为 1 的位的值相加。每个位的值是两个递增指数的连续幂,从最右边的 2^0 (=1) 开始,向左递增。

    这里有一些维基百科参考:

    【讨论】:

    • 哇,这太有用了:“只需分成 4 位组并将每个组转换为十进制。”谢谢!
    【解决方案2】:

    在 Ruby 中:

    将二进制转换为十六进制:

    > '01000011'.to_i(2).to_s(16)
    => "13"
    

    二进制转十进制:

    > '01000011'.to_i(2).to_s(10)
    => "19"
    

    如果设置了最高位,则需要减去 2**(位数)。

    对于一个补码,如果设置了最高位,则需要减去 2**(位数)然后加一。

    【讨论】:

      【解决方案3】:

      我不知道你的问题是否正确,但是

      01000011 十进制是 67 十六进制的 01000011 是 43

      同时 十六进制和十进制的 0100 是 4,十六进制和十进制的 0011 = 3

      关于转换的解释可以在这里找到: http://www.permadi.com/tutorial/numBinToDec/

      【讨论】:

        猜你喜欢
        • 2016-05-24
        • 2014-10-30
        • 1970-01-01
        • 2015-10-26
        • 2014-12-25
        • 2023-03-22
        • 2018-08-26
        • 2018-10-21
        • 1970-01-01
        相关资源
        最近更新 更多