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



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

那么,假设我们得到了一个二进制补位的定点算术:11001011有位编号,2的位置在小数点后面,并想把它变成一个十进制数。

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

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

将二进制补码转换为标准格式(sub by 1, invert):

110010 10 (i sub by 1 here)

001101 01 (i倒在这里)

001101的十进制表示为13

01的十进制形式是1

所以最后我们得到-13.1。这是对的吗,还是根本没有转换的方法?

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

对于你的例子,你有一个6.2的定点数:110010 10:

转换为整数:

11001010 = -54

除以比例因子= 2^2:

-54 / 4 = -13.5

注意小数部分总是无符号的。(您现在可能可以看到10将为小数部分提供+ 0.5,即00 = 0.0, 01 = +0.25, 10 = +0.5, 11 = +0.75)

一个小提示(但对理解你的问题非常重要)——当你说"小数点"时,你真的是指小数吗?或者你指的是"二进制"点。这意味着,如果它是一个小数点,你可以在转换成十进制后定位它,看看有多少十进制数字应该留在点的右边,但如果你指的是二进制点,它意味着在二进制表示中有多少位表示小数部分。在你的例子中,似乎你指的是二进制点,然后整数部分是001101(bin) = 13(dec),小数部分是0.01(bin)=0.25(dec),因为这个点右边的第一个比特代表1/2,第二个代表1/4,以此类推,然后整个东西被否定。总结果将是-13.25

相关内容

  • 没有找到相关文章

最新更新