![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
二进制10000000应该表示128或者-0啊,干嘛等于-128呢?
8个回答
展开全部
这是-128的补码表示。0没有正负之分;如果不引进补码的概念,计算机计算的结果还真会出现+0、-0的问题,引进了补码的概念就没有这个问题了。上面这个数就是-128,是一个字节能表示的最小的有符号数。它也符合求补码的规则:符号位不变,数据位求反+1。也有一种观点认为-128这个数特别,没有反码与补码。不管怎样,计算机里好多东西都是规定,只要运作起来顺畅就是了。不然,下数的原码、反码、补码都一样你能理解吗?取反了一样,加一了还一样,不可思议吧?这也是规定。有些边缘问题先记住,慢慢理解。这个数是不是-128的补码,可以加一个+128看是否为0来验证。位一个字节已不能表示有符号数+128了,那就要用两个字节,+128就是0000000010000000;-128也要扩展为两个字节,扩展原理是用符号位填满扩展字节(+128扩展也是用符号位填满扩展字节,它的符号位是0),就是1111111110000000。0000000010000000+1111111110000000=0。
展开全部
负数在现代计算机里一般用补码表示:
最高位是符号位,其余位为数字的原码取反+1
1000 0000还原为原码:
最高位是1,表示负数,剩余的各位取反 111 1111 再+1 得到 1000 0000, +128的原码,整个数为-128
最高位是符号位,其余位为数字的原码取反+1
1000 0000还原为原码:
最高位是1,表示负数,剩余的各位取反 111 1111 再+1 得到 1000 0000, +128的原码,整个数为-128
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是一个非常特殊的带符号位二进制编码数,表示的是十进制的-128;
补码:1000 0000;
反码:补码减1,1000 0000-1=1111 1111(低位向高位逐次借1,符号位保持不变);
原码:反码取反,符号位保持不变,可推出原码为1000 0000;
从上面的推导中我们发现了一个很有趣,很有意思的现象,那就是这个负数的补码和原码居然是一样的,都是1000 0000,从原码最“原始”的理解,这个数“应该”是表示十进制的-0,那么问题出来了,8位带符号位的二进制编码数0000 0000也表示十进制的0(-0也是0),那岂不是有两个8位二进制编码数都表示十进制的0吗?有冲突了!为了解决这一问题,计算机编码领域统一明文规定,这个补码表示十进制纯数学结果128的负数,也就是-128,以避免出现-0的情况
补码:1000 0000;
反码:补码减1,1000 0000-1=1111 1111(低位向高位逐次借1,符号位保持不变);
原码:反码取反,符号位保持不变,可推出原码为1000 0000;
从上面的推导中我们发现了一个很有趣,很有意思的现象,那就是这个负数的补码和原码居然是一样的,都是1000 0000,从原码最“原始”的理解,这个数“应该”是表示十进制的-0,那么问题出来了,8位带符号位的二进制编码数0000 0000也表示十进制的0(-0也是0),那岂不是有两个8位二进制编码数都表示十进制的0吗?有冲突了!为了解决这一问题,计算机编码领域统一明文规定,这个补码表示十进制纯数学结果128的负数,也就是-128,以避免出现-0的情况
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
八位的原码,可表示的范围是:-127 ~ +127。
八位的反码,可表示的范围是:-127 ~ +127。
八位的补码,可表示的范围是:-128 ~ +127。
即,-128 只有补码,并没有原码和反码。
对于-128,取反加一、减一取反,就都不能用了。
实际上,取反加一,并非是补码的定义式。
补码,有自己的定义式,和原码反码都没有关系。
当 X >= 0, [ X ]补 = X; 零和正数不用变换。
当 X < 0, [ X ]补 = X + 2^n。 n 是补码的位数。
那么,[-128]补 = -128 + 2^8 = 1000 0000 (二进制)。
所以,二进制 1000 0000,就表示-128。
-128 的八位原码和反码,就别想了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那个‘1 ’既代表符号位,也代表数字位
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询