您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 原码、反码与补码的详细讲解
补充资料原码、反码与补码一、概述大家都知道,一个十进制数在计算机中都是以二进制数的形式存储的。十进制数是有正负之分的,那么如何在计算机中来表示正号和负号呢?我们通常使用二进制数的最高位来表示数的符号:“0”来表示正号,“1”来表示负号。在计算机中整型数值数据的编码主要有:z原码z反码z补码在开始讲述这三种编码方法前,我们首先介绍一下机器数、真值、模数的概念。1.机器数数(含符号)在机器中的编码表示。2.真值机器数所对应的真实数值。3.模数一个计量器的容量或与零等价的数。z对于一个n位计数器,每1位有R种状态,每种状态代表1个数,从“0”开始计数。z计数器所能计的数值的个数即模数。z计数器的模数=计数器的最大值+1。z计数器的模数(Rn)取决于基数(R)和位数(n)1补充资料原码、反码与补码例子012位十进制计数器的模数是多少?解:R=10n=2模数=Rn=102=99(最大的2位十进制数)+1=100例子028位二进制计数器的模数是多少?解:R=2n=8模数=Rn=28=255(最大的8位二进制数)+1=2564.为什么使用编码来表示“数”?为了方便计算机的处理,简化计算过程。二、原码1.定义022011≤−−≤−−XXXnn21−Xn=原][X其中:n为二进制的位数原码的表示范围:)12(~)12(11−−−−−nn问题:当n=8时,原码的表示范围是多少?请用十进制数表示。2.求原码的方法求原码的方法概括起来有两种z根据定义求原码z直接写出原码(1)根据定义求原码例子03已知:a=+2,b=-2,根据定义求a,b的原码[a]原和[b]原。设n=8。解:根据公式有[a]原=a=(00000010)2[b]原=2n-1–b2补充资料原码、反码与补码=28-1–(-2)=27+210000000+1010000010(2)直接写出原码这种方法跟我们书上一样,不再赘述。3.原码表示方法存在的问题(1)0有两种表示方法(理由见书上相关章节)(2)原码进行加减运算时,符号位应单独处理,运算规则比较复杂(理由见书上相关章节)三、反码1.定义021||2011≤−−≤−−XXXnn2−Xn−−nn=反][X其中:n为二进制的位数反码的表示范围:−)12(~)12(11−−问题:当n=8时,反码的表示范围是多少?请用十进制数表示。2.求反码的方法求反码的方法概括起来有两种z根据定义求反码z先求负数的原码,除符号位外按位取反(1)根据定义求反码已知:a=+2,b=-2,根据定义求a,b的反码[a]反和[b]反。设n=8。解:根据公式有[a]反=a=[a]原=(00000010)23补充资料原码、反码与补码[b]反=2n–|b|-1=28–|-2|-1=28-3100000000-1111111101(2)先求负数的原码,除符号位外按位取反这种方法跟我们书上一样,不再赘述。3.反码表示方法存在的问题与原码的问题相同,不再赘述。四、补码1.定义02||2011≤−≤−−XXXnn2−Xn−−nn28就是模数=补][X其中:n为二进制的位数补码的表示范围:−)12(~211−问题:当n=8时,补码的表示范围是多少?请用十进制数表示。2.求补码的方法求补码的方法概括起来有两种z根据定义求补码z写出对应正数的原码,连同符号位一起按位取反+13.根据定义求补码已知:a=+2,b=-2,根据定义求a,b的补码[a]补和[b]补。设n=8。解:根据公式有[a]补=a=[a]原=(00000010)2[b]补=2n–|b|4补充资料原码、反码与补码=28–|-2|=28-2100000000-1028就是模数111111104.写出对应正数的原码,连同符号位一起按位取反+1已知:b=-2,求[b]补。设n=8。解:先写出-2对应的正数+2的原码为00000010;所有的位按位取反加1,得到111111105.补码表示方法的特点与书上讲述相同,不再赘述。6.为什么负数补码的编码多一个?假设n=8,那么–28-1(-128)的补码是多少呢?[-128]补=[–28-1]补=[–27]补=28–|–27|=28–27=2×27–27=27=(10000000)2有人可能会觉得这是-0的补码,是这样的吗?我们只要通过定义求一下-0的补码就可以了。[-0]补=28-0=(100000000)2-05补充资料原码、反码与补码=(00000000)2=[+0]补6
本文标题:原码、反码与补码的详细讲解
链接地址:https://www.777doc.com/doc-3172674 .html