-128有8位⼆进制表⽰的原码、反码和补码
⼀、模的概念(我只列举⼀个例⼦,具体请查数学中的 "同余模")
在⽇常⽣活中,有许多化减为加的例⼦。例如,时钟是逢12进位,12点也可看作0点。
当将时针从 10点调整到 5点时有以下两种⽅法:
<1> 将时针逆时针⽅向拨5格,相当于做减法:10 - 5 = 5
<2> 将时针顺时针⽅向拨7格,相当于做加法:10 + ( 12 - 5 ) = 12 + 5 = 5    (模为 12)
⼆、模的运⽤(采⽤模得到补码)
1、补码的得来:是为了让负数变成能够加的正数。so,负数的补码 = 模 - 负数的绝对值
如:-1 补码:1111 1111(1 0000 0000  - 1得来)
当⼀个数要减 1 的时候,可以直接加 1111 1111
2、原码的得来:负数的原码,直接把对应正数的最⾼位改为1
原码能够直观的表⽰⼀个负数(能直观的把真值显⽰出来,如 -1 为 1000 0001,其中最⾼位表⽰符号位,不进⾏算术计算)
3、总结:补码相加,到第9位才舍弃(模10000 0000)补码的最小负数
原码相加,到第8位舍弃(模1000 0000)
反码相加,到第8位舍弃(模1000 0000)
4、原码和补码之间转换:
( 1 ) 补码 = 原码 - 1,再取反 (便于理解)
或补码 =  反码 + 1(便于描述和推理)
( 2 ) 演⽰:补码=原码减1,再取反
如:-1 的原码 1000 0001 => 1000 0000(减1后) => 1111 1111(取反后)补码
( 3 ) 演⽰:补码= 反码+1
如:-1 的原码  1000 0001 => 1111 1110(反码) => 1111 1111(加1)补码
( 4 ) 重点:(特别是在有进位的时候)
原码和反码的最⾼位是符号位,不参加算术运算,模为1000 0000(⽐补码少⼀个0)
⽽补码所有位都可以相加,模为1 0000 0000(最⾼位不是符号位,补码是通过模减去负数绝对值得到的)
三、推断 -128 的原码和补码(⽤补码 =  反码 + 1)
1、关于原码 1000 0000,表⽰的是 -0,还是 -128 呢?(答案是 -128 ⽽不是 -0 )
先看看原码的概念吧:正数的符号位为 0,负数的符号位为 1,其它位按照⼀般的⽅法来表⽰数的绝对值
0 是负数吗?0 既不是正数也不是负数,那么它的符号位到底是 0 还是 1 呢?(0 的符号位为 0,不能为 1)
看看负数补码的公式:负数的补码 = 1 0000 0000(模)  -  数的绝对值
⽐如:-1  1111 1111 = 1 0000 0000 - 0000 0001
-2  1111 1110 = 1 0000 0000 - 0000 0010
现在假设 -0 为负数,那么
-0 的补码应该是1 0000 0000 - 0(这个 0,姑且叫 0 的绝对值吧) = 0000 0000
反码:1111 1111(0000 0000 - 1 = 0000 0000 + 1111 1111 = 1111 1111)
原码:1000 0000
现在来推-128
-128的补码:1 0000 0000 - 1000 0000( +128 没有符号位) = 1000 0000
反码:1111 1111(1000 0000 -1 = 1000 0000 + 1111 1111 = 1111 1111) (补码-1)
原码:1000 0000(反码取反)
从上⾯看来,⼀个原码对应了2个补码
但是仔细分析:原码的概念,负数的符号位为 1,但是 0 不是负数,所以不能⽤此公式。0 也不是正数,但是可以把0定义为原码、反码和补码都⼀样(即 0000 0000),⽽且据说可以推断出 0 的补码只有⼀个(有兴趣的可以去推⼀下,呵呵)
现在原码 1000 0000 就唯⼀表⽰-128了,⽽不会表⽰出 -0,因为 -0 不能⽤这个公式计算。
现在,补码 1000 0000 的原码是 1000 0000 (已证明),那么原码 1000 0000 的补码是 1000 0000 吗?
原码 1000 0000  (-128,进位被舍去)
反码 1111 1111
补码 1000 0000 (1111 1111(反码) + 1 = 1000 0000,这⾥实际上真正相加的是 1111 1111 后⾯的7位,第1位是符号位始终不会变,所以,当进到第8位的时候,溢出了,会被舍弃)
2、综上所述:
<1> -128的补码和原码⼀样都是 1000 0000,
<2> 0的原码、反码和补码都⼀样(即 0000 0000 )
<3> 如果把 -0 当做负数,1000 0000 就会有歧义(事实上 0 的补码只有⼀个 0000 0000 )

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。