【问题标题】:Converting a two's complement in fix-point arithmetic (with bit numbering) to decimal number将定点算术(带位编号)中的二进制补码转换为十进制数
【发布时间】:2017-01-22 06:28:08
【问题描述】:

我想知道如何将定点算术中的二进制补码转换为十进制数。

假设我们在二进制补码中得到了这个定点算术:11001011 带位编号,2 位置在小数点后面,并希望将其形成为十进制数。

我们已经知道小数点是负数,因为第一位是1

2 位于小数点后面,所以我们有110010 11

将其从二进制补码转换为正常形式(sub by 1invert):

110010 10(我在这里是1

001101 01(这里倒过来了)

001101 十进制是13

01 十进制是1

所以最后我们到达-13.1。这是正确的还是没有办法转换它?

【问题讨论】:

    标签: binary numbers decimal converter number-formatting


    【解决方案1】:

    一个小注释(但对于理解您的问题非常重要) - 当您说“小数点”时,您真的是指小数吗?还是您的意思是“二进制”点。 意思是,如果是小数点,您可以在转换为十进制后将其定位,以查看该点右侧应保留多少 decimal 位,但如果您指的是二进制点,则表示在二进制表示有多少位表示小数部分。 在您的示例中,您的意思似乎是二进制点,然后整数部分是 001101(bin) = 13(dec),小数部分是 0.01(bin)=0.25(dec),因为右边的第一位点代表 1/2,第二个代表 1/4,依此类推,然后整个事物被否定。 总结果将是 -13.25

    【讨论】:

      【解决方案2】:

      最简单的方法是将整个值转换为整数(最初忽略固定点),然后缩放结果。

      因此,对于您的示例,您的定点数为 6.2:110010 10:

      转换为整数:

      11001010 = -54
      

      除以比例因子 = 2^2:

      -54 / 4 = -13.5
      

      请注意,小数部分始终是无符号的。 (您现在可能会看到10 会给您+ 0.5 作为小数部分,即00 = 0.001 = +0.2510 = +0.511 = +0.75。)

      【讨论】:

      • 哦,哇,谢谢你的回答并与我分享这个方法,不知道它也会这样工作! :)
      • @cnmesr:不客气 - 您可能会发现将定点数视为具有隐式缩放因子的整数会有所帮助。
      猜你喜欢
      • 2011-09-03
      • 2014-03-01
      • 2013-09-28
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 2014-05-21
      • 2014-02-15
      • 2014-11-15
      相关资源
      最近更新 更多