补码10000000唯一的表示-128是一个规定,不需要推算,理由如下:
现在来推-128的补码:
-128的补码:10000000 - 10000000(+128没有符号位)=10000000
-128的反码:1111 1111(1000 0000 +1=1000 0000+1111 1111=1111 1111)
-128的原码:10000000(反码取反)
往回推:
-128的原码 10000000 (-128,进位被舍去)
-128的反码 11111111
-128的补码 10000000(11111111(反码) + 1=10000000,这里实际上真正相加的是11111111后面的7位,第1位是符号位始终不会变,所以,当进到第8位的时候,就表示溢出了,会被舍弃。0只有一个补码00000000,如果是这样,那么10000000就不会表示成-0的补码
即:补码1000 0000唯一的表示-128,在补码中用(-128)代替了(-0),所以补码的表示范围为: (-128~0~127)共256个.
注意:(-128)也有相对应的原码和反码, 它的反码是(11111111)原码仍然是(10000000)(-128)
负数的补码就是对反码加1,而正数不变,正数的原码反码补码是一样的。
补码的得来:是为了让负数变成能够加的正数,所以,负数的补码=模-负数的绝对值。
比如:-1 补码:11111111(00000001,也就是-1的绝对值,取反加1得来)当一个数要减1的时候,可以直接加 11111111。
10000000表示-128的补码,你可以理解为是一个特殊性。
各种8位二进制的表示法的数据范围如下:
原码: -127 ~ 127
反码: -127 ~ 127
补码: -128 ~ 127
补码运算:正数为原码本身,负数为原码取反加一
127为正数,其补码为原码0111 1111
-127为负数,其补码为原码0111 1111,取反1000 0000,加一,1000 0001。
根据这情况来看,表示-0,不是的,-0的原码是1000 0000补码是0000 0000。+0的补码也是0000 0000
于是就有了规定 1000 0000 定为 -128的补码
这种定法和上面数学层面的表述是一致的。
这样规定后,负数的补码在机器中就好算了。
在约定的范围内(-128-+127,对16位32位64位等扩大范围)
先将该负数取绝对值,再用二进制表示出这个绝对值 (不管符号位)
对该二进制数进行取反加一操作就得到负数的补码了
-128 绝对值是 128
128的二进制表示为:
1000 0000
取反
0111 1111
加1
1000 0000
这就是-128的补码
这种办法算出的结果符合“规定值”,规定而已。
-128是人为规定的。
因为8位2进制中,存在 “-0”(1000 0000)和"0"(0000 0000),虽然“-0”也是“0”,但根据正、反、补码体系,“-0”的补码和“+0”是不同的,这样就出现两个补码代表一个数值的情况。为了将补码与数字一一对应,所以人为规定“0”一律用“+0”代表。同时为了充分利用资源,就将原来本应该表示“-0”的补码规定为代表-128。
有人说我内容不规范,拜托,这个内容不是我原创的,难道没看到下面一行作者的原创声明吗????
————————————————以下为原回答————————————————
二进制下,有多少位数参加运算,模就是在 1 的后面加上多少个 0。
这个时候我们就可以尝试去解答本篇博客题目所提出的问题了——为什么(八位二进制中)-128的补码是10000000?
其实,我们可以这样理解:-128是一个负数,而负数的补码等于模减去该数的绝对值。所以-128的补码是它的“模”(即256)减去它的绝对值,即:
100000000 - 10000000 = 10000000
这样我们就解决了最基本的问题了。
————————————————
版权声明:本文为CSDN博主「一只野生饭卡丘」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:
什么是补码?怎么求补码?
看看书,就会知道,补码,是有严格定义的。
按照定义来求补码,就用不着涉及原码反码。
如果,你非要用求反加一的做法,就难免碰上原码反码。
但是,的八位码长的限制下,-128,既没有原码,也没有反码。
这时,你还要用求反加一的做法,就一定会碰的头破血流。
------------
按照补码的定义,负数的补码,定义如下:
[ X ]补 = 模-| X |
按照定义,-128,如下求补码。
[-128]补 = 256-|-128| = 128
写成二进制,就是:1000 0000。
------------
这就是详解。
简不简单? 意不意外?
是不是比“求反加一”更方便?
利用定义,可以求任何负数的补码。
但是,多数人,都是推崇“求反加一”的。
你们这些人,都是被人忽悠瘸了。呵呵
如此简单的定义、方法,你们不学、不用,
偏要去钻死胡同,呵呵
使用求反加一!!!
你们能找到-128 的原码、反码吗?