为什么8位的二进制补码范围是-128~127,而不是-127--127呀??为什么差一个数呀??

为什么8位的二进制补码范围是-128-127,而不是-127-127呀?为什么差一个数呀?... 为什么8位的二进制补码范围是-128-127,而不是-127-127呀?为什么差一个数呀? 展开
 我来答
张京的个人博客
2006-04-03 · TA获得超过2055个赞
知道小有建树答主
回答量:851
采纳率:66%
帮助的人:694万
展开全部
数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为

(-127~-0 +0~127)共256个.

? 有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits

( 1 )?10-? ( 1 )10?=? ( 1 )10?+ ( -1 )10?= ?( 0 )10

(00000001)原?+ (10000001)原?= (10000010)原?= ( -2 )?显然不正确.

? 因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:

?( 1 )10?-? ( 1 )?10=? ( 1 )?10+ ( -1 )?10= ?( 0 )10

?(00000001)?反+ (11111110)反?=? (11111111)反?=? ( -0 ) ?有问题.

( 1 )10?-? ( 2)10?=? ( 1 )10?+ ( -2 )10?= ?( -1 )10

(00000001)?反+ (11111101)反?=? (11111110)反?=? ( -1 )?正确

问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).

于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:

(-128~0~127)共256个.

注意:(-128)没有相对应的原码和反码, (-128) = (10000000)

参考资料: http://zhidao.baidu.com/question/4319911.html

沙里波特
2024-11-14 · TA获得超过5245个赞
知道大有可为答主
回答量:1.1万
采纳率:100%
帮助的人:625万
展开全部

上过小学,就知道自然数包括:正数、负数、零。

零,只有一个零。

零,既不是正数、也不是负数。

没有上过小学的人,才会想出来:正零、负零。

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

计算机专家,编造了一个符号位。

硬生生的,在零的前面,加上了正负号!

好好的一个零,就被弄成了两个:+0、-0。

正因为这样,在原码和反码中,也就都比正常的编码,少了一个数。

而且,什么是 +0、-0 呢?

这种表示方法,显然是违背数学规律的。

·

计算机专家编造出来两个零,吓唬吓唬人,还是可以的。

但是,这种乱码,却唬不了计算机!

因此,计算机,根本就无法使用原码和反码!

所以,在计算机系统中,数值,就【一律采用补码】表示和存储。

这就是说:在计算机中,既不使用原码反码,也不储存原码反码。

计算机专家编造的两个零,根本就没有用上。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式