将带有位编号的定点算术中的二进制补码转换为十进制数

3
我想知道如何将二进制补码的定点算术转换为十进制数。假设我们有一个带有位编号的二进制补码:11001011,小数点后有2个位置,并且希望将其转换为十进制数。由于第一位是1,因此我们已经知道十进制将是负数。小数点后2位,因此我们有110010 11。将它从二进制补码转换为正常形式(减去1,反转):110010 10(我在这里减去了1),001101 01(我在这里反转)。十进制中的001101是13,十进制中的01是1。因此,最终结果为-13.1。是否正确或者根本没有办法进行转换?
2个回答

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。)

哇,谢谢你的回答并与我分享这个方法,我不知道它也能这样工作!:) - user6530185
@cnmesr:不客气 - 你可能会发现,将定点数视为具有隐含缩放因子的整数会有所帮助。 - undefined

0

一个小提示(但在理解您的问题时非常重要)- 当您说“小数点”时,您真正意思是十进制吗?还是指“二进制”点? 换句话说,如果它是一个小数点,您可以在转换为十进制后将其放在后面,以查看小数点右边应保留多少十进制位数,但是如果您指的是二进制点,则表示二进制表示中有多少位表示分数部分。 在您的例子中,似乎您指的是二进制点,然后整数部分是001101(二进制)= 13(十进制),而小数部分是0.01(二进制)= 0.25(十进制),因为小数点右侧的第一位代表1/2,第二位代表1/4等等,并且整个内容被否定。 因此,最终结果将是-13.25


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接