二进制:关于10000000如何表示-128的问题

问一下,有符号的二进制数最高位是符号位。所以对于10000000那个1是表示负数。那么这个数求它的原码是用0000000减去1,再求反。0000000-1=1111111... 问一下,有符号的二进制数最高位是符号位。所以对于10000000那个1是表示负数。那么这个数求它的原码是用0000000减去1,再求反。0000000-1=1111111求反就是0000000。这个数10000000不就表示0了吗?为什么还是-128呢?网上说直接对10000000减1,再求反就是10000000,即为-128.这两种说法很矛盾啊!求大神解释下啊!那个符号位1表示符号呢,还是数字呢?而且这个补码是不是带符号位的??说的详细点啊,有追加!! 展开
 我来答
沙里波特
2021-03-15 · TA获得超过5238个赞
知道大有可为答主
回答量:1.1万
采纳率:100%
帮助的人:605万
展开全部
什么是补码? 怎么求补码?
看看书,就会知道,补码,是有严格定义的。
按照定义来求补码,就用不着涉及原码反码。
如果,你非要用“求反加一”的做法,就难免碰上原码反码。

--------
但是,的八位码长的限制下,-128,既没有原码,也没有反码。

这时,你还要用求反加一的做法,就一定会碰的头破血流。
------------

按照补码的定义,负数的补码,定义式如下:

  [ X ]补 = 模-| X |

码长为 8 位,模,就是 2^8 = 256。
那么,按照定义,-128,如下求补码。
  [-128]补 = 256-|-128| = 128

把 128 写成二进制,就是:1000 0000。
------------
这就是详解。

简不简单? 意不意外?

是不是比“求反加一”更方便?

利用定义式,可以求任何负数的补码。

但是,很多人,都是推崇“求反加一”的。

你们这些人,都是被人忽悠瘸了。呵呵
如此简单的定义、方法,你们不学、不用,
偏要去钻死胡同,呵呵

使用求反加一!!!

你们能找到-128 的原码、反码吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
盼兰八
2022-01-23 · TA获得超过1830个赞
知道小有建树答主
回答量:409
采纳率:91%
帮助的人:16.4万
展开全部
这是一个非常特殊的带符号位二进制编码数,表示的是十进制的-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的情况
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kevin_room
2013-07-10 · TA获得超过132个赞
知道小有建树答主
回答量:156
采纳率:100%
帮助的人:85.5万
展开全部
补码,一般我们说的补码是二补码,还有个一补码。一补码就是直接取反,二补码是取反加1(正数变负)。

一补码的0有两种表示方法,有+0和-0区别。
二补码的0只有一种表示方法,就是0,0x0.(0000 0000)
补码计算是没有符号位之说,只是转换成十进制的时候才有符号位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友262a8d918
2013-07-10 · TA获得超过184个赞
知道小有建树答主
回答量:328
采纳率:100%
帮助的人:150万
展开全部
对负数的原码 反码 补码的运算 符号位不参与运算的 一直是1
更多追问追答
追问
那10000000这个怎么求原码,如果1不参与运算的话??
追答
10000000就是-128的补码的 它减1 你可以认为变成了 1111 1111 取反又变成了 1000 0000
最后值为-2^7
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
满意请采纳哟
推荐于2017-09-14 · 知道合伙人教育行家
满意请采纳哟
知道合伙人教育行家
采纳数:30595 获赞数:373479
2010年本科毕业于安徽工业大学高分子材料与工程专业,并取得工科学士学位证书。

向TA提问 私信TA
展开全部
负数在现代计算机里一般用补码表示:
最高位是符号位,其余位为数字的原码取反+1
1000 0000还原为原码:
最高位是1,表示负数,剩余的各位取反 111 1111 再+1 得到 1000 0000, +128的原码,整个数为-128
负数
求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1 。
同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。
【例2】求-5的补码。
-5对应正数5(00000101)→所有位取反(11111010)→加1(11111011)
所以-5的补码是11111011。
【例3】数0的补码表示是唯一的。
[+0]补=[+0]反=[+0]原=00000000
[ -0]补=11111111+1=00000000

转化为原码
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
⑵如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
【例4】已知一个补码为11111001,则原码是10000111(-7)。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;
再加1,所以是10000111。

补码的绝对值
【例5】-65的补码是10111111
若直接将10111111转换成十进制,发现结果并不是-65,而是191。
事实上,在计算机内,如果是一个二进制数,其最左边的位是1,则我们可以判定它为负数,并且是用补码表示。
若要得到一个负二进制补码的数值,只要对补码全部取反并加1,就可得到其数值。
如:二进制值:10111111(-65的补码)
各位取反:01000000
加1:01000001(+65)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式