计算机中为什么二进制补码10000000可以表示-128?怎么推出来的? 10000000要转化
计算机中为什么二进制补码10000000可以表示-128?怎么推出来的?10000000要转化成原码先减1,那样不就把符号位减没了吗?...
计算机中为什么二进制补码10000000可以表示-128?怎么推出来的?
10000000要转化成原码先减1,那样不就把符号位减没了吗? 展开
10000000要转化成原码先减1,那样不就把符号位减没了吗? 展开
6个回答
2016-11-23
展开全部
将其八位全部取反,得到01111111, 然后加1,得到10000000. 将该数看作无符号数,值为128, 故计算机中的10000000表示的是-128。
最高位(即符号位)为1的8位有符号数有128个,故可表示128个负数;最高位为0的8位有符号数有128个,但全0的那个表示数0,所以总共只能表示127个正整数.
最高位(即符号位)为1的8位有符号数有128个,故可表示128个负数;最高位为0的8位有符号数有128个,但全0的那个表示数0,所以总共只能表示127个正整数.
追问
为什么要取反加1呢,不明白
展开全部
什么是补码?怎么求补码?
看看书,就会知道,补码,是有严格定义的。
按照定义来求补码,就用不着涉及原码反码。
如果,你非要用求反加一的做法,就难免碰上原码反码。
但是,的八位码长的限制下,-128,既没有原码,也没有反码。
这时,你还要用求反加一的做法,就一定会碰的头破血流。
------------
按照补码的定义,负数的补码,定义如下:
[ X ]补 = 模-| X |
按照定义,-128,如下求补码。
[-128]补 = 256-|-128| = 128
写成二进制,就是:1000 0000。
------------
这就是详解。
简不简单? 意不意外?
是不是比“求反加一”更方便?
利用定义,可以求任何负数的补码。
但是,多数人,都是推崇“求反加一”的。
你们这些人,都是被人忽悠瘸了。呵呵
如此简单的定义、方法,你们不学、不用,
偏要去钻死胡同,呵呵
使用求反加一!!!
你们能找到-128 的原码、反码吗?
看看书,就会知道,补码,是有严格定义的。
按照定义来求补码,就用不着涉及原码反码。
如果,你非要用求反加一的做法,就难免碰上原码反码。
但是,的八位码长的限制下,-128,既没有原码,也没有反码。
这时,你还要用求反加一的做法,就一定会碰的头破血流。
------------
按照补码的定义,负数的补码,定义如下:
[ X ]补 = 模-| X |
按照定义,-128,如下求补码。
[-128]补 = 256-|-128| = 128
写成二进制,就是:1000 0000。
------------
这就是详解。
简不简单? 意不意外?
是不是比“求反加一”更方便?
利用定义,可以求任何负数的补码。
但是,多数人,都是推崇“求反加一”的。
你们这些人,都是被人忽悠瘸了。呵呵
如此简单的定义、方法,你们不学、不用,
偏要去钻死胡同,呵呵
使用求反加一!!!
你们能找到-128 的原码、反码吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
符号位是1啊,数据是全0,表示-128
公式我忘了,反正8位有符号整数,带符号位负数+对应正数=100000000(后面8个0)
虽然10000000+10000000=100000000,所以对应是-128
1FFFFFFF+00000001=100000000,所以对应-1
公式我忘了,反正8位有符号整数,带符号位负数+对应正数=100000000(后面8个0)
虽然10000000+10000000=100000000,所以对应是-128
1FFFFFFF+00000001=100000000,所以对应-1
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
补码 10000000,表示多大?
这个八位的补码,代表的是:-128。
-------------------------
-128,有八位的补码,并没有八位的原码和反码。
因为,原码和反码的定义,都是有缺陷的:
一个数字零,它们却都定义了两个编码!
所以,八位的原码反码,只能表示-127 ~ +127。
无法表示-128。
因此,用“取反加一”求-0 或-128 的补码,都是行不通的。
同样,用“取反加一”求补码 1000 0000 对应的原码,也是不灵的。
-------------------------
求补码的正规做法,是使用定义式:
当 X >= 0, [ X ]补 = X; 零和正数不用变换。
当 X < 0, [ X ]补 = X + 2^n。 n 是补码的位数。
这个定义式,是通用的。你可以在书上找到的。
那么,[-128]补 = -128 + 2^8 = 1000 0000 (二进制)。
所以,八位的补码 1000 0000,就是代表数值-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的情况
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询