128的二进制有原码反码和补码 (1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一次修订 2009-5-6 14:11
---------------------
1.模的概念(我只讲个例子,具体的可以查数学中的 "同余模")
在日常生活中,有许多化减为加的例子。例如,时钟是逢12进位,12点也可看作0点。
当将时针从10点调整到5点时有以下两种方法:
1.将时针逆时针方向拨5格,相当于做减法: 10-5=5
2.将时针顺时针方向拨7格,相当于做加法:10+(12-5)=12+5=5 (模为 12) 2.模的运用(采用模得到补码)
1.补码的得来:是为了让负数变成能够加的正数,so,负数的补码=模-负数的绝对值
比如:-1 补码:1111 1111(10000 0000 -1得来)
当一个数要减1的时候,可以直接加 1111 1111
2.原码的得来:(负数的原码,直接把对应正数的最高位改为1)
原码能够直观的表示一个负数(能直观的把真值显示出来,如 -1为1000 0001
其中最高位表示符号位,不进行算术计算) 3.总结:补码相加,到第9位才舍弃(模10000 0000)
原码相加,到第8位舍弃(模1000 0000)
反码相加,到第8位舍弃(模1000 0000)
3.原码和补码之间转换:
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)
而补码所有位都可以相加,模为10000 0000(最高位不是符号位,补码是通过模减去负数绝对值得到的)
5.推断-128的原码和补码(用补码= 反码+1)
1.关于原码1000 0000,表示的是-0,还是-128呢?(答案是-128而不是-0)
1.先看看原码的概念吧:正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值
2.0是负数吗?0既不是正数也不是负数,那么它的符号位到底是0还是1呢?(0的符号位为0,不能为1)
3.看看负数补码的公式:负数的补码=10000 0000(模)-数的绝对值
比如:-1 1111 1111 =10000 0000-0000 0001
-2 1111 1110 =10000 0000-0000 0010
现在假设-0为负数,那么
-0的补码应该是10000 0000 - 0(这个0,姑且教0的绝对值吧)=0000 0000 反码:1111 1111(0000 0000 -1=0000 0000 +1111 1111=1111 1111)
原码:1000 0000
现在来推-128
-128的补码:10000 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)
第一次的手稿 2009-5-5 22:47
-----------------
1.使用反码的意义:
1.使符号位能与有效值部分一起参加运算,从而简化运算规则。从而可以简化运算器
的结构,提高运算速度;
(减法运算可以用加法运算表示出来。)
2.加法运算比减法运算更易于实现。使减法运算转换为加法运算,进一步简化计算机
中运算器的线路设计。
2.负数的二进制数串表示一般用补码:(如何通过原码推补码,特别是-128的解释)
1.先给出3个原则:
1.因为使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,
即如果是补码表示的数,
不管是加减法都直接用加法运算即可实现。
2.两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃(模的概念,补码的模10000 0000)
比如:1111 1111(-1) +1000 0001(-127)=1000 0000(-128,实际上最高位有3个1,
进位一次后,还保留一个1)
1111 1110(-2) + 0000 0100(4) = 0000 0010(2)
3.模的规则:(自己的推断)
1.补码的模为10000 0000
2.反码的模为1000 0000(从反码的定义也能够知道,即反码的运算不涉及符
号位)
3.模的解释
在日常生活中,有许多化减为加的例子。例如,时钟是逢12进位,12点也可
看作0点。
当将时针从10点调整到5点时有以下两种方法:
1.时针逆时针方向拨5格,相当于做减法: 10-5=5
2.时针顺时针方向拨7格,相当于做加法:10+(12-5)=12+5=5 (模为 12)
2.原码、反码和补码的定义:(主要讨论负数的)
1.正整数的原码、反码和补码都一样
2.负数:
1.原码就是原来的表示方法
2.反码是原码除符号位(最高位)外取反
3.补码=反码+1
3.举例:以一个单字节来说:(即8位)
-1 原码 1000 0001(通过原码得到真值)
反码 1111 1110
补码 1111 1111(通过补码得到二进制)