你好 不知道你是否看过唐朔飞版的计算机组成原理 上面说8位的机器数代表补码时,对应的真值范围是-128~127

10000000这个代表-128的补码 我觉得这个有问题,你觉得呢

8 位的机器数代表补码时,对应的真值范围是-128~127。

--正确。

1000 0000  这个代表-128的补码。

--欠妥。应该说:

1000 0000 这“是”-128 的补码。

-------------

用 8 位的原码和反码,来代表数值,最小值都是-127。

而用补码来表示数值,最小值,就是-128。

补码,比原码和反码,能多表示一个数值。

这是因为:原码和反码的定义,就是不合理的。

一个零,它们都编造了两个代码。

所以,计算机中,根本就不用它们。

那么,你从原码反码代表的最小值,是不能导出补码最小值的。

原码反码取反加一符号位不变”,在这里是不好用的。

你必须用“补码的定义式”来求证,你才能理解:

 【 1000 0000  这“就是” -128的补码。】


温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-14
没有问题,可以通过补码定义式推出这个结论。

一般对于字长为N为的补码数,其最小值二进制代码形式为:1000000...000,长度共N位

真值大小为:-2^(n-1)

n=8带入上式,得最小值=-2^7=-128追问

谢谢,但是.......
我觉得-128不能用8位表示出来,因为第8位上为1才能表示绝对值为128,然后再加符号位,所以我觉得至少要9位(所以通常就需要16位)
看到你的一个回答是这样的:
-128就是要+128的原码全部取反再加1:
+128的原码:[00000000][10000000]
取反就得到:[11111111][01111111]
再加1得到了:[11111111][10000000],这就是 -128的补码
我觉得这才是对的,要16位才能表示-128,你觉得呢?

追答

原码在8为情况下是不能表示-128的,至少需要9位才行!

补码表示范围比原码多一个数,恰恰就是这个-2^(n-1)。这个数你不能通过原码转换得到!

第2个回答  2013-10-23
嗯,你是不是觉得转化为真值时有问题,感觉少一位,计算机运算就是补码,不用转化。
第3个回答  2011-12-16
不懂