用定点补码表示纯小数,采用8位字长,编码10000000表示的十进制数是-1,请教怎么计算出来的?

如题所述

你怎么尽给我出难题
机器数的补码可由原码得到。若机器数为正数,则其补码与原码一样;如果机器数为负数,则其补码是对它的原码(除符号位外)各位取反,再加1而得到的(也就是对其反码再加1)。也可用公式表示,若X是纯整数,则:
X 0<=X<=2^(n-1)-1
[X]补
2^(n-1)+x -2^(n-1)-1<=X<=0
若X是纯小数,则:
X 0<=X<=1
[X]补
2+x -1<=X<=0
[-1]补=1 1111111 负数补码是对它的原码(除符号位外)各位取反
第一位不变,其它相反。所以是10000001
编码11111111表示-0.0078125。
因为:编码1111111的反码是0000000,再加1为:0000001,是0.0078125。
以上希望对你有用追问

照你这算法,-1的补码应该是11111111,这好像还是没有回答我的问题,为什么编码10000000表示的十进制数是-1?

追答

在计算机机器数的编码中,定点纯小数的格式为:b0b–1b–2b–3b–4b–5b–6b–7。其中,b0为符号位,小数点就在其后。故采用8位字长用定点补码表示纯小数,编码10000000所表示的十进制数是–1。
参考方法如下:
1.因为是8位字长,所以编码10000000可以理解为:“1”是符号位 “0000000(7位字长)”是数值;
2.可以把符号位放在一旁,只看后面的数值,先去反然后加一,得到补码的原码“10000000”,这时在把符号位加上去,为“110000000”
3.采用的是八位字长,所以即为10000000,十进制为-1.
这样因该理解了吧

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-09-16

显然,你只会“取反加一”这个做法。

而且,你还不知道“原码比补码少一个”的事。

对于定点小数-1,它只有补码,却并没有原码和反码。

所以,对于-1,是绝对不可能,用“取反加一”求出补码来的。

求补码的正规做法,是利用“补码的定义式”。

如图所示,X 是纯小数时,补码定义如下:

  当  0 <= X < 1, [ X ]补 = X

  当 -1 <= X < 0, [ X ]补 = 2 + X 

因此,[-1]补 = 2-1 = 1.0。

补齐八位,-1 的补码就是:1000 0000。

第2个回答  2021-03-25

你得从整数补码入手,才能理解。

八位整数补码,小数点是在最右边。所代表的数值是:-128~+127。

对应的补码是:1000 0000~0111 1111。

其中,-128,就是最小值,其补码是 1000 0000。

但是,-128 只有补码,没有原码反码。

用“取反加一”来求-128 的补码,是求不出来的。

必须使用“补码的定义式”才能求出来。

--------

八位的定点小数补码,小数点是在“符号、数值”中间。

与整数补码相比,小数点左移了七位。

这就相当于除以 128。  

那么,所代表的数值是:-128/128~+127/128。

即:-1 ~ +127/128。

其对应的补码,仍然是:1000 0000~0111 1111。

其中,-1,就是最小值,其补码,就是 1000 0000。

 

同样,-1,也是:【只有补码、没有原码反码】,

所以,用“取反加一”的方法,解释不通。

 

证明完毕。

第3个回答  2011-08-04
也可用公式表示,若X是纯整数,则:
X 0<=X<=2^(n-1)-1
[X]补
2^(n-1)+x -2^(n-1)-1<=X<=0
若X是纯小数,则:
X 0<=X<=1
[X]补
2+x -1<=X<=0
[-1]补=1 1111111 负数补码是对它的原码(除符号位外)各位取反
第一位不变,其它相反。所以是10000001
编码11111111表示-0.0078125。
因为:编码1111111的反码是0000000,再加1为:0000001,是0.0078125。
相似回答