照你这算法,-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.
这样因该理解了吧
你得从整数补码入手,才能理解。
八位整数补码,小数点是在最右边。所代表的数值是:-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,也是:【只有补码、没有原码反码】,
所以,用“取反加一”的方法,解释不通。
证明完毕。