计算机数据-原码反码补码

上传人:w****3 文档编号:48944995 上传时间:2022-01-16 格式:DOC 页数:22 大小:266KB
返回 下载 相关 举报
计算机数据-原码反码补码_第1页
第1页 / 共22页
计算机数据-原码反码补码_第2页
第2页 / 共22页
计算机数据-原码反码补码_第3页
第3页 / 共22页
点击查看更多>>
资源描述
计算机数据表示1二进制计数制引入二进制数字系统的计算机结构和性能具有如下的优点:(1)技术实现容易。(2)二进制运算规则简单。(3)计算机中二进制数的0、1数码与逻辑代数变量值0与1吻合,所以二进制 同时可以使计算机方便地进行逻辑运算。(4)二进制数和十进制数之间的关系亦不复杂。2. 任意进制计数制和十进制计数制的相互转换十进制数转换成二进制数:十进制数据转换为二进制数时,因整数部分与小数部分转换算法不同, 需要分别 进行。(1) 整数转换方法除基取余法十进制整数除以2取余数作最低位系数k 0,再取商的继续除以2取余数作高 一位的系数,如此继续直到商为0时停止,最后一次的余数就是整数部分最高有 效位的二进制系数,依次所得到的余数序列就是转换成的二进制数。因为除数2是二进制的基数,所以这种算法称作除基取余”法。(2) 小数转换方法乘基取整法把十进制小数乘以2,取其积的整数部分作为对应二进制小数的最高位系数k -1,再取积的纯小数部分乘以2,新得积的整数部分又作下一位的系数 k -2, 再取其积的纯小数部分继续乘 2,直到乘积小数部分为0时停止,这时乘积 的整数部分是二进制数最低位系数,每次乘积得到的整数序列就是所求的二进制 小数,这种方法每次乘以基数取其整数作系数。 所以叫乘基取整法。需要指出的 是并不是所有十进制小数都能转换成有限位的二进制小数并出现乘积的小数部 分0的情况,有时整个换算过程会无限进行下去, 此时可以根据要求并考虑计算 机字长,取一定长度的位数后四舍五入,这时得到的二进制数是原十进制数的近 似值。一个既有整数部分又有小数的数送入计算机后,由机器把整数部分按除基取余” 法,小数部分按 乘基取整”法分别进行转换,然后合并。任意进制数转换成十进制数:任意一种进位计数制的数转换成十进制数的方法都是一样的。 把任意进制数按权 展开成多项式和的形式,把各位的权与该位上的数码相乘, 乘积逐项相加,其和 便是相应的十进制数。十进制数转换成任意进制数 :十进制数转换成任意进制数与十进制数转换成二进制数的方法完全相同,即整数部分用除基取余的算法,小数部分用乘基取整的方法,然后将整数与小数拼接成 一个数作为转换的最后结果。3. 数的机器码表示符号数的机器码表示:(1)机器数和真值数在计算机中的表示形式统称为机器数。 机器数有两个基本特点,其一,数的符 号数值化。实用的数据有正数和负数,因为计算机只能表示0、1两种状态,数据的正号“ +”负号-”在机器里就用一位二进制的0或1来区别。通常这个符 号放在二进制数的最高位,称符号位,以 0代表符号“ +;以1代表符号这 样正负符号就被数值化了。因为有符号占据一位,数的形式值就不等于真正的数 值,带符号位的机器数对应的数值称为机器数的真值。机器数的另一个特点是二进制的位数受机器设备的限制。 机器内部设备一次能表 示的二进制位数叫机器的字长,一台机器的字长是固定的。字长8位叫一个字节(Byte),现在机器字长一般都是字节的整数倍,如字长 8位、16位、32位、6 4位。符号位数值化之后,为能方便的对机器数进行算术运算、 提高运算速度,计算机 设计了多种符号位与数值一起编码的方法,最常用的机器数表示方法有三种 :原 码、反码和补码。(2)原码表示法和反码表示法一个机器数X由符号位和有效数值两部分组成。 设符号位为X 0,X真值的绝对值|X|=X 1 X 2X n , X的机器数原码表示为:X原 =X0X1XXn当 X% 时,X0 =0当 X0 时,X0 =1原码表示很直观,但原码加减运算时符号位不能视同数值一样参加运算, 运算规 则复杂,运算时间长,而计算机大量的数据处理工作是加减运算, 原码表示就很 不方便了。一个负数的原码符号位不动,其余各位取相反码就是机器数的另一种表示形式 一 反码表示法。正数的反码与原码相同。设X原=X0X1X2Xn当 X0 =0 时,X反 =X0X1X2Xn当 X0 =1 时,X反 =X0X1X2Xn(3) 补码表示法(complement)设计补码表示法的目的是:使符号位能和有效数值部分一起参加数值运算从而简化运算规则,节省运算时间。使减法运算转化成加法运算, 从而进一步简化 计算机中运算器的线路设计。计算机是一种有限字长的数字系统,因此都是有模 运算,超过模的运算结果都将溢出。n位二进制整数的模是2 n。对于二进制数还有一种更加简单的方法由原码求得补码。正数的补码表示与原码一样,X 补=X 原负数的补码是将原码符号位保持 “ 1之后其余各位取相反的码,末位加1便得 到补码,即取其原码的反码再加 1 : X补=X反+1。真值+0和-0的补码表示是一致的,但在原码和反码表示中具有不同的形式。8位补码机器数可以表示-128,但不存在+128的补码,由此可知8位二进制补码能 表示数的范围是-128+127。应该注意,不存在-128的8位原码和反码形式。 根据互补的概念,一个补码机器数再求一次补就得到机器数的原码了。定点数与浮点数:(1) 定点数(fixed-point number)计算机处理的数据不仅有符号,而且大量的数带有小数,小数点不占有二进制位 而是隐含有机器数里某固定位置上。通常采用两种简单的约定:一种是约定所有 机器数的小数点位置隐含在机器数的最低位之后,叫定点纯整数机器数,简称定点整数。另一种约定是所有机器数的小数点位置隐含在符号位之后、有效数值部分最高位之前,叫定点纯小数机器数,简称定点小数。计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比 例因子,数据按比例因子缩小成定点小数或扩大成定点整数再参加运算,结果输出时再按比例折算成实际值。n位原码定点整数的表示范围是-(2 n-1 -1)勺 n-1 -1,n位原码定点小数的表示范围是-(1-2 - (n-1)議勻-2 - (n-1)。当机器数小于定点数的最小值时, 被当作0处理,超出定点数的最大值时,机器 无法表达,称作溢出”此时机器将停止运算,屏幕显示溢出警告。定点数表示方法简单直观,不过定点数表示数的范围小,不易选择合适的比例因 子,运算过程容易产生溢出。摘自计算机数据表示1二进制计数制引入二进制数字系统的计算机结构和性能具有如下的优点 :(1) 技术实现容易。(2) 二进制运算规则简单。(3) 计算机中二进制数的0、1数码与逻辑代数变量值0与1吻合,所以二进制 同时可以使计算机方便地进行逻辑运算。(4) 二进制数和十进制数之间的关系亦不复杂。2. 任意进制计数制和十进制计数制的相互转换十进制数转换成二进制数:十进制数据转换为二进制数时,因整数部分与小数部分转换算法不同, 需要分别 进行。(1) 整数转换方法除基取余法十进制整数除以2取余数作最低位系数k 0,再取商的继续除以2取余数作高 一位的系数,如此继续直到商为0时停止,最后一次的余数就是整数部分最高有 效位的二进制系数,依次所得到的余数序列就是转换成的二进制数。因为除数2是二进制的基数,所以这种算法称作除基取余”法。(2) 小数转换方法乘基取整法把十进制小数乘以2,取其积的整数部分作为对应二进制小数的最高位系数k -1,再取积的纯小数部分乘以2,新得积的整数部分又作下一位的系数 k -2, 再取其积的纯小数部分继续乘 2,直到乘积小数部分为0时停止,这时乘积 的整数部分是二进制数最低位系数,每次乘积得到的整数序列就是所求的二进制 小数,这种方法每次乘以基数取其整数作系数。 所以叫乘基取整法。需要指出的 是并不是所有十进制小数都能转换成有限位的二进制小数并出现乘积的小数部 分0的情况,有时整个换算过程会无限进行下去, 此时可以根据要求并考虑计算 机字长,取一定长度的位数后四舍五入,这时得到的二进制数是原十进制数的近 似值。一个既有整数部分又有小数的数送入计算机后,由机器把整数部分按除基取余” 法,小数部分按 乘基取整”法分别进行转换,然后合并。任意进制数转换成十进 制数:任意一种进位计数制的数转换成十进制数的方法都是一样的。 把任意进制数按权 展开成多项式和的形式,把各位的权与该位上的数码相乘, 乘积逐项相加,其和 便是相应的十进制数。十进制数转换成任意进制数 :十进制数转换成任意进制数与十进制数转换成二进制数的方法完全相同,即整数部分用除基取余的算法,小数部分用乘基取整的方法,然后将整数与小数拼接成 一个数作为转换的最后结果。3. 数的机器码表示符号数的机器码表示:(1)机器数和真值数在计算机中的表示形式统称为机器数。 机器数有两个基本特点,其一,数的符 号数值化。实用的数据有正数和负数,因为计算机只能表示0、1两种状态,数据的正号“ +”负号-”,在机器里就用一位二进制的0或1来区别。通常这个符 号放在二进制数的最高位,称符号位,以 0代表符号“ +;以1代表符号-”,这 样正负符号就被数值化了。因为有符号占据一位,数的形式值就不等于真正的数 值,带符号位的机器数对应的数值称为机器数的真值。机器数的另一个特点是二进制的位数受机器设备的限制。 机器内部设备一次能表 示的二进制位数叫机器的字长,一台机器的字长是固定的。字长8位叫一个字节(Byte),现在机器字长一般都是字节的整数倍,如字长 8位、16位、32位、6 4位。符号位数值化之后,为能方便的对机器数进行算术运算、 提高运算速度,计算机设计了多种符号位与数值一起编码的方法,最常用的机器数表示方法有三种:原码、反码和补码。(2) 原码表示法和反码表示法一个机器数X由符号位和有效数值两部分组成。 设符号位为X 0,X真值的绝对值|X|=X 1 X 2X n , X的机器数原码表示为:X原 =X0X1XXn当 X% 时,X0 =0当 X0 时,X0 =1原码表示很直观,但原码加减运算时符号位不能视同数值一样参加运算, 运算规 则复杂,运算时间长,而计算机大量的数据处理工作是加减运算, 原码表示就很 不方便了。一个负数的原码符号位不动,其余各位取相反码就是机器数的另一种表示形式 一 反码表示法。正数的反码与原码相同。设X原=X0X1XXn当 X0 =0 时,X反 =X0X1XXn当 X0 =1 时,X反 =X0X1XXn(3) 补码表示法(complement)设计补码表示法的目的是:使符号位能和有效数值部分一起参加数值运算从而简化运算规则,节省运算时间。使减法运算转化成加法运算, 从而进一步简化 计算机中运算器的线路设计。计算机是一种有限字长的数字系统,因此都是有模 运算,超过模的运算结果都将溢出。n位二进制整数的模是2 n。对于二进制数还有一种更加简单的方法由原码求得补码。正数的补码表示与原码一样,X 补=X 原负数的补码是将原码符号位保持 “ 1之后其余各位取相反的码,末位加1便得 到补码,即取其原码的反码再加 1 : X补=X反+1。真值+0和-0的补码表示是一致的,但在原码和反码表示中具有不同的形式。 8 位补码机器数可以表示-128,但不存在+128的补码,由此可知8位二进制补码能 表示数的范围是-128+127。应该注意,不存在-128的8位原码和反码形式。根据互补的概念,一个补码机器数再求一次补就得到机器数的原码了。定点数与浮点数:(1) 定点数(fixed-point number)计算机处理的数据不仅有符号,而且大量的数带有小数,小数点不占有二进制位 而是隐含有机器数里某固定位置上。通常采用两种简单的约定:一种是约定所有 机器数的小数点位置隐含在机器数的最低位之后,叫定点纯整数机器数,简称定点整数。另一种约定是所有机器数的小数点位置隐含在符号位之后、有效数值部分最高位之前,叫定点纯小数机器数,简称定点小数。计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比 例因子,数据按比例因子缩小成定点小数或扩大成定点整数再参加运算,结果输出时再按比例折算成实际值。n位原码定点整数的表示范围是-(2 n-1 -1)勺 n-1 -1,n位原码定点小数的表示范围是-(1-2 - (n-1)議勻-2 - (n-1)。当机器数小于定点数的最小值时, 被当作0处理,超出定点数的最大值时,机器 无法表达,称作溢出”此时机器将停止运算,屏幕显示溢出警告。定点数表示方法简单直观,不过定点数表示数的范围小,不易选择合适的比例因 子,运算过程容易产生溢出。计算机数据表示1二进制计数制引入二进制数字系统的计算机结构和性能具有如下的优点:(1) 技术实现容易。(2) 二进制运算规则简单。(3) 计算机中二进制数的0、1数码与逻辑代数变量值0与1吻合,所以二进制 同时可以使计算机方便地进行逻辑运算。(4) 二进制数和十进制数之间的关系亦不复杂。2. 任意进制计数制和十进制计数制的相互转换十进制数转换成二进制数:十进制数据转换为二进制数时,因整数部分与小数部分转换算法不同,需要分别进行。十进制整数除以2取余数作最低位系数k 0,再取商的继续除以2取余数作高 一位的系数,如此继续直到商为0时停止,最后一次的余数就是整数部分最高有 效位的二进制系数,依次所得到的余数序列就是转换成的二进制数。因为除数2是二进制的基数,所以这种算法称作除基取余”法。(2)小数转换方法乘基取整法把十进制小数乘以2,取其积的整数部分作为对应二进制小数的最高位系数 k - 1,再取积的纯小数部分乘以2,新得积的整数部分又作下一位的系数 k -2, 再取其积的纯小数部分继续乘 2,直到乘积小数部分为0时停止,这时乘积 的整数部分是二进制数最低位系数,每次乘积得到的整数序列就是所求的二进制 小数,这种方法每次乘以基数取其整数作系数。 所以叫乘基取整法。需要指出的 是并不是所有十进制小数都能转换成有限位的二进制小数并出现乘积的小数部 分0的情况,有时整个换算过程会无限进行下去, 此时可以根据要求并考虑计算 机字长,取一定长度的位数后四舍五入,这时得到的二进制数是原十进制数的近 似值。一个既有整数部分又有小数的数送入计算机后,由机器把整数部分按除基取余” 法,小数部分按 乘基取整”法分别进行转换,然后合并。任意进制数转换成十进 制数:任意一种进位计数制的数转换成十进制数的方法都是一样的。 把任意进制数按权 展开成多项式和的形式,把各位的权与该位上的数码相乘, 乘积逐项相加,其和 便是相应的十进制数。十进制数转换成任意进制数 :十进制数转换成任意进制数与十进制数转换成二进制数的方法完全相同,即整数部分用除基取余的算法,小数部分用乘基取整的方法,然后将整数与小数拼接成 一个数作为转换的最后结果。3. 数的机器码表示符号数的机器码表示:(1)机器数和真值数在计算机中的表示形式统称为机器数。 机器数有两个基本特点,其一,数的符 号数值化。实用的数据有正数和负数,因为计算机只能表示 0、1两种状态,数 据的正号“ +”负号在机器里就用一位二进制的0或1来区别。通常这个符 号放在二进制数的最高位,称符号位,以 0代表符号“ +;以1代表符号-”,这 样正负符号就被数值化了。因为有符号占据一位,数的形式值就不等于真正的数 值,带符号位的机器数对应的数值称为机器数的真值。机器数的另一个特点是二进制的位数受机器设备的限制。 机器内部设备一次能表 示的二进制位数叫机器的字长,一台机器的字长是固定的。字长8位叫一个字节(Byte),现在机器字长一般都是字节的整数倍,如字长 8位、16位、32位、6 4位。符号位数值化之后,为能方便的对机器数进行算术运算、 提高运算速度,计算机 设计了多种符号位与数值一起编码的方法,最常用的机器数表示方法有三种 :原 码、反码和补码。(2) 原码表示法和反码表示法一个机器数X由符号位和有效数值两部分组成。 设符号位为X 0,X真值的绝对值|X|=X 1 X 2X n , X的机器数原码表示为:X原 =X0X1XXn当 X% 时,X0 =0当 X0 时,X0 =1原码表示很直观,但原码加减运算时符号位不能视同数值一样参加运算, 运算规 则复杂,运算时间长,而计算机大量的数据处理工作是加减运算, 原码表示就很 不方便了。一个负数的原码符号位不动,其余各位取相反码就是机器数的另一种表示形式 一 反码表示法。正数的反码与原码相同。设X原=X0X1XXn当 X0 =0 时,X反 =X0X1XXn当 X0 =1 时,X反 =X0X1XXn(3) 补码表示法(complement)设计补码表示法的目的是:使符号位能和有效数值部分一起参加数值运算从而简化运算规则,节省运算时间。使减法运算转化成加法运算, 从而进一步简化 计算机中运算器的线路设计。计算机是一种有限字长的数字系统,因此都是有模 运算,超过模的运算结果都将溢出。n位二进制整数的模是2 n。对于二进制数还有一种更加简单的方法由原码求得补码。正数的补码表示与原码一样,X 补=X 原负数的补码是将原码符号位保持“ 1之后其余各位取相反的码,末位加1便得到补码,即取其原码的反码再加 1 : X补=X反+1。真值+0和-0的补码表示是一致的,但在原码和反码表示中具有不同的形式。8位补码机器数可以表示-128,但不存在+128的补码,由此可知8位二进制补码能 表示数的范围是-128+127。应该注意,不存在-128的8位原码和反码形式。 根据互补的概念,一个补码机器数再求一次补就得到机器数的原码了。定点数与浮点数:(1) 定点数(fixed-point number)计算机处理的数据不仅有符号,而且大量的数带有小数,小数点不占有二进制位 而是隐含有机器数里某固定位置上。通常采用两种简单的约定:一种是约定所有 机器数的小数点位置隐含在机器数的最低位之后,叫定点纯整数机器数,简称定点整数。另一种约定是所有机器数的小数点位置隐含在符号位之后、有效数值部分最高位之前,叫定点纯小数机器数,简称定点小数。计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比 例因子,数据按比例因子缩小成定点小数或扩大成定点整数再参加运算,结果输出时再按比例折算成实际值。n位原码定点整数的表示范围是-(2 n-1 -1)勺n-1 -1,n位原码定点小数的表示范围是-(1-2 - (n-1)議勻-2 - (n-1)。 当机器数小于定点数的最小值时, 被当作0处理,超出定点数的最大值时,机器 无法表达,称作溢出”此时机器将停止运算,屏幕显示溢出警告。定点数表示方法简单直观,不过定点数表示数的范围小,不易选择合适的比例因 子,运算过程容易产生溢出。摘自计算机数据表示1二进制计数制引入二进制数字系统的计算机结构和性能具有如下的优点:(1)技术实现容易。(2)二进制运算规则简单。(3)计算机中二进制数的0、1数码与逻辑代数变量值0与1吻合,所以二进制 同时可以使计算机方便地进行逻辑运算。(4)二进制数和十进制数之间的关系亦不复杂。2. 任意进制计数制和十进制计数制的相互转换十进制数转换成二进制数:十进制数据转换为二进制数时,因整数部分与小数部分转换算法不同, 需要分别 进行。(1) 整数转换方法除基取余法十进制整数除以2取余数作最低位系数k 0,再取商的继续除以2取余数作高 一位的系数,如此继续直到商为0时停止,最后一次的余数就是整数部分最高有 效位的二进制系数,依次所得到的余数序列就是转换成的二进制数。因为除数2是二进制的基数,所以这种算法称作除基取余”法。(2) 小数转换方法乘基取整法把十进制小数乘以2,取其积的整数部分作为对应二进制小数的最高位系数k -1,再取积的纯小数部分乘以2,新得积的整数部分又作下一位的系数 k -2, 再取其积的纯小数部分继续乘 2,直到乘积小数部分为0时停止,这时乘积 的整数部分是二进制数最低位系数,每次乘积得到的整数序列就是所求的二进制 小数,这种方法每次乘以基数取其整数作系数。 所以叫乘基取整法。需要指出的 是并不是所有十进制小数都能转换成有限位的二进制小数并出现乘积的小数部 分0的情况,有时整个换算过程会无限进行下去, 此时可以根据要求并考虑计算 机字长,取一定长度的位数后四舍五入,这时得到的二进制数是原十进制数的近 似值。一个既有整数部分又有小数的数送入计算机后,由机器把整数部分按除基取余” 法,小数部分按 乘基取整”法分别进行转换,然后合并。任意进制数转换成十进 制数:任意一种进位计数制的数转换成十进制数的方法都是一样的。把任意进制数按权 展开成多项式和的形式,把各位的权与该位上的数码相乘, 乘积逐项相加,其和 便是相应的十进制数。十进制数转换成任意进制数 :十进制数转换成任意进制数与十进制数转换成二进制数的方法完全相同,即整数部分用除基取余的算法,小数部分用乘基取整的方法,然后将整数与小数拼接成 一个数作为转换的最后结果。3. 数的机器码表示符号数的机器码表示:(1)机器数和真值数在计算机中的表示形式统称为机器数。 机器数有两个基本特点,其一,数的符 号数值化。实用的数据有正数和负数,因为计算机只能表示0、1两种状态,数据的正号“ +”负号-”在机器里就用一位二进制的0或1来区别。通常这个符 号放在二进制数的最高位,称符号位,以 0代表符号“ +;以1代表符号这 样正负符号就被数值化了。因为有符号占据一位,数的形式值就不等于真正的数 值,带符号位的机器数对应的数值称为机器数的真值。机器数的另一个特点是二进制的位数受机器设备的限制。 机器内部设备一次能表 示的二进制位数叫机器的字长,一台机器的字长是固定的。字长8位叫一个字节(Byte),现在机器字长一般都是字节的整数倍,如字长 8位、16位、32位、6 4位。符号位数值化之后,为能方便的对机器数进行算术运算、 提高运算速度,计算机 设计了多种符号位与数值一起编码的方法,最常用的机器数表示方法有三种 :原 码、反码和补码。(2)原码表示法和反码表示法一个机器数X由符号位和有效数值两部分组成。 设符号位为X 0,X真值的绝对值|X|=X 1 X 2X n , X的机器数原码表示为:X原 =X0X1XXn当 X% 时,X0 =0当 X0 时,X0 =1原码表示很直观,但原码加减运算时符号位不能视同数值一样参加运算, 运算规 则复杂,运算时间长,而计算机大量的数据处理工作是加减运算, 原码表示就很 不方便了。一个负数的原码符号位不动,其余各位取相反码就是机器数的另一种表示形式 一 反码表示法。正数的反码与原码相同。设X原=X0X1X2Xn当 X0 =0 时,X反 =X0X1X2Xn当 X0 =1 时,X反 =X0X1X2Xn(3) 补码表示法(complement)设计补码表示法的目的是:使符号位能和有效数值部分一起参加数值运算从而简化运算规则,节省运算时间。使减法运算转化成加法运算, 从而进一步简化 计算机中运算器的线路设计。计算机是一种有限字长的数字系统,因此都是有模 运算,超过模的运算结果都将溢出。n位二进制整数的模是2 n。对于二进制数还有一种更加简单的方法由原码求得补码。正数的补码表示与原码一样,X 补=X 原负数的补码是将原码符号位保持 “ 1之后其余各位取相反的码,末位加1便得 到补码,即取其原码的反码再加 1 : X补=X反+1。真值+0和-0的补码表示是一致的,但在原码和反码表示中具有不同的形式。8位补码机器数可以表示-128,但不存在+128的补码,由此可知8位二进制补码能 表示数的范围是-128+127。应该注意,不存在-128的8位原码和反码形式。 根据互补的概念,一个补码机器数再求一次补就得到机器数的原码了。定点数与浮点数:(1) 定点数(fixed-point number)计算机处理的数据不仅有符号,而且大量的数带有小数,小数点不占有二进制位 而是隐含有机器数里某固定位置上。通常采用两种简单的约定:一种是约定所有 机器数的小数点位置隐含在机器数的最低位之后,叫定点纯整数机器数,简称定点整数。另一种约定是所有机器数的小数点位置隐含在符号位之后、有效数值部分最高位之前,叫定点纯小数机器数,简称定点小数。计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比例因子,数据按比例因子缩小成定点小数或扩大成定点整数再参加运算,结果输 出时再按比例折算成实际值。n位原码定点整数的表示范围是-(2 n-1 -1)n-1 -1, n位原码定点小数的表示范围是-(1-2 - (n-1) ) ACA-2 - (n-1)。 当机器数小于定点数的最小值时, 被当作0处理,超出定点数的最大值时,机器 无法表达,称作溢出”此时机器将停止运算,屏幕显示溢出警告。定点数表示方法简单直观,不过定点数表示数的范围小,不易选择合适的比例因 子,运算过程容易产生溢出数值在计算机中表示形式为机器数 ,计算机只能识别0和1,使用的是二进制而在 日常生活中人们使用的是十进制数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机 器数的原码了 .假设机器能处理的位数为 8.即字长为1byte,原码能表示数值的范 围为(-127-0 +0127共 256 个.有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原 码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下:假设字长 为 8bits(1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10(00000001)原 + (10000001原 = (10000010)原 = ( -2 )显然不正确.因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的 负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应.下面是反码的减法运算:(1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )10(00000001)反 + (11111110反 = (11111111)反 = ( -0 )有问题.(1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10(00000001)反 + (11111101)反 = (11111110)反 = ( -1 )正确问题出现在(+0刑(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明 的贡献极大).于是就引入了补码概念.负数的补码就是对反码加一,而正数不变,正数的原码反 码补码是一样的.在补码中用(-128)代替了 (-0),所以补码的表示范围为:(-1280127)共 256 个.注意:(-128)没有相对应的原码和反码 , (-128) = (10000000) 补码的加减运算如下( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = ( 0 )10(00000001)补 + (11111111)补 = (00000000)补 = ( 0 ) 正确( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10(00000001) 补+ (11111110) 补= (11111111)补 = ( -1 ) 正确所以补码的设计目的是 :使符号位能与有效值部分一起参加运算 ,从而简化运算规则 .使减法运算转换为加法运算 ,进一步简化计算机中运算器的线路设计 所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C 等其他高级语言中使用的都是原码。补码 反码 二进制理解有符号数和无符号数回头看上一节,我们所讲的数都是正数。 同样是年纪和工资, 前者不需要有负值, 但后者可能需要 至少所有的老板都这样认为。那么,负数在计算机中如何表示呢?这一点,你可能听过两种不同的回答。一种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的 概念一说就得一节课, 这一些我们需要在第 6章中用一章的篇幅讲 2进制的一切。 再者,用“补码”表示负数,其实一种公式,公式的作用在于告诉你,想得问题 的答案,应该如何计算。却并没有告诉你为什么用这个公式就可以和答案?另一种是一些程序员告诉你的:用二进制数的最高位表示符号,最高位是0,表示正数,最高位是 1,表示负数。这种说法本身没错,可是如果没有下文,那么 它就是错的。至少它不能解释,为什么字符类型的 -1用二进制表示是“1111 1111” (16进制为FF)而不是我们更能理解的“ 1000 0001”。(为什么说后者更好理解 呢?因为既然说最高位是 1 时表示负数,那 1000 0001不是正好是 -1 吗?)。让我们从头说起1、你自已决定是否需要有正负就像我们必须决定某个量使用整数还是实数, 使用多大的范围数一样, 我们必须 自已决定某个量是否需要正负。 如果这个量不会有负值, 那么我们可以定它为带 正负的类型。在计算机中,可以区分正负的类型,称为有符类型,无正负的类型(只有正值) 称为无符类型。数值类型分为整型或实型, 其中整型又分为无符类型或有符类型, 而实型则只有 符类型。字符类型也分为有符和无符类型。比如有两个量, 年龄和库存, 我们可以定前者为无符的字符类型, 后者定为有符 的整数类型。2、使用二制数中的最高位表示正负。首先得知道最高位是哪一位? 1个字节的类型,如字符类型,最高位是第 7 位, 2 个字节的数,最高位是第 15 位, 4 个字节的数,最高位是第 31 位。不同长度 的数值类型,其最高位也就不同,但总是最左边的那位(如下示意) 。字符类型 固定是 1 个字节,所以最高位总是第 7 位。(红色为最高位 )单字节数: 1111 1111双字节数: 1111 1111 1111 1111四字节数: 1111 1111 1111 1111 1111 1111 1111 1111当我们指定一个数量是无符号类型时,那么其最高位的1或 0,和其它位一样,用来表示该数的大小。当我们指定一个数量是无符号类型时,此时,最高数称为“符号位” 。为 1 时, 表示该数为负值,为 0 时表示为正值。3、无符号数和有符号数的范围区别。无符号数中, 所有的位都用于直接表示该值的大小。 有符号数中最高位用于表示正负,所以,当为正值时, 该数的最大值就会变小。 我们举一个字节的数值对比:无符号数: 1111 1111 值:255 1* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20有符号数:0111 1111值:1271* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22+ 1* 21 + 1*20同样是一个字节,无符号数的最大值是 255,而有符号数的最大值是 127。原因 是有符号数中的最高位被挪去表示符号了。 并且,我们知道, 最高位的权值也是 最高的(对于 1 字节数来说是 2的 7 次方=128),所以仅仅少于一位,最大值一 下子减半。不过,有符号数的长处是它可以表示负数。因此,虽然它的在最大值缩水了,却在负值的方向出现了伸展。我们仍一个字节的数值对比:无符号数:0 255有符号数: -128 0 127同样是一个字节,无符号的最小值是 0 ,而有符号数的最小值是 -128。所以二 者能表达的不同的数值的个数都一样是 256 个。只不过前者表达的是 0 到 255 这 256 个数,后者表达的是 -128 到+127这 256 个数。一个有符号的数据类型的最小值是如何计算出来的呢?有符号的数据类型的最大值的计算方法完全和无符号一样, 只不过它少了一个最 高位(见第 3点)。但在负值范围内, 数值的计算方法不能直接使用 1* 26 + 1* 25 的公式进行转换。 在计算机中, 负数除为最高位为 1 以外,还采用补码形式进行 表达。所以在计算其值前, 需要对补码进行还原。 这些内容我们将在第六章中的 二进制知识中统一学习。这里,先直观地看一眼补码的形式:以我们原有的数学经验,在 10 进制中: 1 表示正 1,而加上负号: -1 表示和 1 相对的负值。那么,我们会很容易认为在 2进制中( 1个字节): 0000 0001 表示正 1,则高 位为 1 后: 1000 0001应该表示 -1。然而,事实上计算机中的规定有些相反,请看下表: 二进制值( 1 字节)十进制值1000 0000-1281000 0001-1271000 0010-1261000 0011-1251111 1110-2 1111 1111-1首先我们看到,从 -1 到 -128,其二进制的最高位都是 1(表中标为红色),正如 我们前面的学。然后我们有些奇怪地发现, 1000 0000 并没有拿来表示 -0;而 1000 0001 也不是 拿来直观地表示 -1。事实上, -1 用 1111 1111 来表示。怎么理解这个问题呢?先得问一句是 -1 大还是 -128 大? 当然是 -1 大。-1 是最大的负整数。以此对应,计算机中无论是字符类型,或者 是整数类型,也无论这个整数是几个字节。它都用全 1 来表示 -1。比如一个字 节的数值中: 1111 1111表示-1,那么, 1111 1111 - 1 是什么呢?和现实中的计 算结果完全一致。 1111 1111 - 1 = 1111 1110,而 1111 1110就是 -2。这样一直减 下去,当减到只剩最高位用于表示符号的 1以外,其它低位全为 0 时,就是最小 的负值了,在一字节中,最小的负值是 1000 0000,也就是 -128。我们以 -1 为例,来看看不同字节数的整数中,如何表达 -1 这个数: 字节数二进制值十进制值单字节数1111 1111 -1双字节数1111 1111 1111 1111-1四字节数1111 1111 1111 1111 1111 1111 1111 1111-1可能有同学这时会混了: 为什么 1111 1111 有时表示 255,有时又表示 -1?所以 我再强调一下本节前面所说的第 2 点:你自已决定一个数是有符号还是无符号 的。写程序时,指定一个量是有符号的,那么当这个量的二进制各位上都是 1 时,它表示的数就是 -1;相反,如果事选声明这个量是无符号的,此时它表示的 就是该量允许的最大值,对于一个字节的数来说,最大值就是 255。原码、反码、补码 我们已经知道计算机中,所有数据最终都是使用二进制数表达。 我们也已经学会如何将一个 10 进制数如何转换为二进制数。 不过,我们仍然没有学习一个负数如何用二进制表达。比如,假设有一 int 类型的数,值为 5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 000001015转换成二制是 101,不过 int 类型的数占用 4字节(32位),所以前面填了一堆 0。现在想知道, -5 在计算机中如何表示?在计算机中,负数以其正值的补码形式表达。什么叫补码呢?这得从原码,反码说起。原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。比如 00000000 00000000 00000000 00000101是 5 的 原码。反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。取反操作指:原为 1,得 0;原为 0,得 1。(1 变 0; 0 变 1)比如:将 00000000 00000000 00000000 00000101 每一位取反,得 11111111 11111111 11111111 11111010。称: 11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。反码是相互的,所以也可称:11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。补码:反码加 1 称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。比如: 00000000 00000000 00000000 00000101 的反码是: 11111111 11111111 11111111 11111010。那么,补码为:11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 1111111111111011所以,-5 在计算机中表达为: 11111111 11111111 11111111 11111011。转换为 十六进制:OxFFFFFFF。再举一例,我们来看整数 -1 在计算机中如何表示假设这也是一个 int 类型,那么:1、先取 1 的原码: OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOO12、 得反码:11111111 11111111 11111111 1111111O3、 得补码:11111111 11111111 11111111 11111111
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿件


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!