计算机数据-原码_反码_补码_第1页
计算机数据-原码_反码_补码_第2页
计算机数据-原码_反码_补码_第3页
计算机数据-原码_反码_补码_第4页
计算机数据-原码_反码_补码_第5页
免费预览已结束,剩余33页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机数据表示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 位、64 位。符号位数值化之后, 为能方便的对机器数进行算术运算、 提高运算速度, 计算机设计了多种符号位与数值一起编码的方法,最常用的机器数表示方法有三种 :原码、反码和补码。(2) )原码表示法和反码表示法一个机器数 x 由符号位和有效数值两部分组成。设符号位为 x 0 ,x 真值的绝对值|x|=x 1 x 2 x n ,x 的机器数原码表示为 : x原 =x0x1x2xn当 x0 时, x0=0当 x0 时 , x0=1原码表示很直观, 但原码加减运算时符号位不能视同数值一样参加运算, 运算规则复杂, 运算时间长, 而计算机大量的数据处理工作是加减运算, 原码表示就很不方便了。一个负数的原码符号位不动, 其余各位取相反码就是机器数的另一种表示形式 反码表示法。正数的反码与原码相同。设x原 =x0x1x2xn当 x0=0 时, x 反 =x0x1x2xn当 x0=1 时, x 反 =x0x1x2xn(3) )补码表示法( complement )设计补码表示法的目的是:使符号位能和有效数值部分一起参加数值运算从而 简化运算规则, 节省运算时间。 使减法运算转化成加法运算,从而进一步简化计算机中运算器的线路设计。 计算机是一种有限字长的数字系统,因此都是有模运算,超过模的运算结果都将溢出。n 位二进制整数的模是2n 。对于二进制数还有一种更加简单的方法由原码求得补码。正数的补码表示与原码一样, x 补 = x 原负数的补码是将原码符号位保持“1”之后其余各位取相反的码,末位加1 便得到补码,即取其原码的反码再加1x 补 =x 反 +1 。真值+0 和-0 的补码表示是一致的,但在原码和反码表示中具有不同的形式。8位补码机器数可以表示 -128 ,但不存在 +128 的补码,由此可知 8 位二进制补码能表示数的范围是 -128 +127 。应该注意,不存在 -128 的 8 位原码和反码形式。根据互补的概念, 一个补码机器数再求一次补就得到机器数的原码了。 定点数与浮点数:( 1)定点数( fixed-point number )计算机处理的数据不仅有符号,而且大量的数带有小数, 小数点不占有二进制位而是隐含有机器数里某固定位置上。通常采用两种简单的约定:一种是约定所有机器数的小数点位置隐含在机器数的最低位之后,叫定点纯整数机器数, 简称定点整数。另一种约定是所有机器数的小数点位置隐含在符号位之后、有效数值部分最高位之前,叫定点纯小数机器数,简称定点小数。计算机采用定点数表示时, 对于既有整数又有小数的原始数据, 需要设定一个比例因子,数据按比例因子缩小成定点小数或扩大成定点整数再参加运算,结果输出时再按比例折算成实际值。n 位原码定点整数的表示范围是-(2 n-1-1)x 2n-1-1 , n 位原码定点小数的表示范围是-(1-2-(n-1 ) )x1-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 位、64 位。符号位数值化之后, 为能方便的对机器数进行算术运算、 提高运算速度, 计算机设计了多种符号位与数值一起编码的方法,最常用的机器数表示方法有三种 :原码、反码和补码。(2) )原码表示法和反码表示法一个机器数 x 由符号位和有效数值两部分组成。设符号位为x 0,x 真值的绝对值|x|=x1 x2xn ,x 的机器数原码表示为 : x原 =x0x1x2xn当 x0 时, x0=0当 x0 时 , x0=1原码表示很直观, 但原码加减运算时符号位不能视同数值一样参加运算,运算规则复杂, 运算时间长, 而计算机大量的数据处理工作是加减运算,原码表示就很不方便了。一个负数的原码符号位不动, 其余各位取相反码就是机器数的另一种表示形式反码表示法。正数的反码与原码相同。设x原 =x0x1x2xn当 x0=0 时, x 反 =x0x1x2xn当 x0=1 时, x 反 =x0x1x2xn(3) )补码表示法( complement )设计补码表示法的目的是:使符号位能和有效数值部分一起参加数值运算从而 简化运算规则, 节省运算时间。 使减法运算转化成加法运算,从而进一步简化计算机中运算器的线路设计。 计算机是一种有限字长的数字系统,因此都是有模运算,超过模的运算结果都将溢出。n 位二进制整数的模是2n 。对于二进制数还有一种更加简单的方法由原码求得补码。正数的补码表示与原码一样, x 补 = x 原负数的补码是将原码符号位保持“1”之后其余各位取相反的码,末位加1 便得到补码,即取其原码的反码再加1x 补 =x 反 +1 。真值+0 和-0 的补码表示是一致的,但在原码和反码表示中具有不同的形式。8位补码机器数可以表示 -128 ,但不存在 +128 的补码,由此可知 8 位二进制补码能表示数的范围是 -128 +127 。应该注意,不存在 -128 的 8 位原码和反码形式。根据互补的概念, 一个补码机器数再求一次补就得到机器数的原码了。 定点数与浮点数:( 1)定点数( fixed-pointnumber )计算机处理的数据不仅有符号,而且大量的数带有小数, 小数点不占有二进制位而是隐含有机器数里某固定位置上。通常采用两种简单的约定:一种是约定所有机器数的小数点位置隐含在机器数的最低位之后,叫定点纯整数机器数, 简称定点整数。另一种约定是所有机器数的小数点位置隐含在符号位之后、有效数值部分最高位之前,叫定点纯小数机器数,简称定点小数。计算机采用定点数表示时, 对于既有整数又有小数的原始数据,需要设定一个比 例因子,数据按比例因子缩小成定点小数或扩大成定点整数再参加运算,结果输出时再按比例折算成实际值。n 位原码定点整数的表示范围是-(2 n-1-1)x 2n-1-1 , n 位原码定点小数的表示范围是-(1-2-(n-1 ) )x1-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 位、64 位。符号位数值化之后, 为能方便的对机器数进行算术运算、 提高运算速度, 计算机设计了多种符号位与数值一起编码的方法,最常用的机器数表示方法有三种 :原码、反码和补码。(2) )原码表示法和反码表示法一个机器数 x 由符号位和有效数值两部分组成。设符号位为 x 0 ,x 真值的绝对值|x|=x 1 x 2 x n ,x 的机器数原码表示为 : x原 =x0x1x2xn当 x0 时, x0=0当 x0 时 , x0=1原码表示很直观, 但原码加减运算时符号位不能视同数值一样参加运算, 运算规则复杂, 运算时间长, 而计算机大量的数据处理工作是加减运算, 原码表示就很不方便了。一个负数的原码符号位不动, 其余各位取相反码就是机器数的另一种表示形式 反码表示法。正数的反码与原码相同。设x原 =x0x1x2xn当 x0=0 时, x 反 =x0x1x2xn当 x0=1 时, x 反 =x0x1x2xn(3) )补码表示法( complement )设计补码表示法的目的是:使符号位能和有效数值部分一起参加数值运算从而 简化运算规则, 节省运算时间。 使减法运算转化成加法运算,从而进一步简化计算机中运算器的线路设计。 计算机是一种有限字长的数字系统,因此都是有模运算,超过模的运算结果都将溢出。n 位二进制整数的模是2n 。对于二进制数还有一种更加简单的方法由原码求得补码。正数的补码表示与原码一样, x 补 = x 原负数的补码是将原码符号位保持“1”之后其余各位取相反的码,末位加1 便得到补码,即取其原码的反码再加1x 补 =x 反 +1 。真值+0 和-0 的补码表示是一致的,但在原码和反码表示中具有不同的形式。8位补码机器数可以表示 -128 ,但不存在 +128 的补码,由此可知 8 位二进制补码能表示数的范围是 -128 +127 。应该注意,不存在 -128 的 8 位原码和反码形式。根据互补的概念, 一个补码机器数再求一次补就得到机器数的原码了。 定点数与浮点数:( 1)定点数( fixed-point number )计算机处理的数据不仅有符号,而且大量的数带有小数, 小数点不占有二进制位而是隐含有机器数里某固定位置上。通常采用两种简单的约定:一种是约定所有机器数的小数点位置隐含在机器数的最低位之后,叫定点纯整数机器数, 简称定点整数。另一种约定是所有机器数的小数点位置隐含在符号位之后、 有效数值部分最高位之前,叫定点纯小数机器数,简称定点小数。计算机采用定点数表示时, 对于既有整数又有小数的原始数据,需要设定一个比 例因子,数据按比例因子缩小成定点小数或扩大成定点整数再参加运算,结果输出时再按比例折算成实际值。n 位原码定点整数的表示范围是-(2 n-1-1)x 2n-1-1 , n 位原码定点小数的表示范围是-(1-2-(n-1 ) )x1-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 位、64 位。符号位数值化之后, 为能方便的对机器数进行算术运算、 提高运算速度, 计算机设计了多种符号位与数值一起编码的方法,最常用的机器数表示方法有三种 :原码、反码和补码。(2) )原码表示法和反码表示法一个机器数 x 由符号位和有效数值两部分组成。设符号位为 x 0 ,x 真值的绝对值|x|=x 1 x 2 x n ,x 的机器数原码表示为 : x原 =x0x1x2xn当 x0 时, x0=0当 x0 时 , x0=1原码表示很直观, 但原码加减运算时符号位不能视同数值一样参加运算, 运算规则复杂, 运算时间长, 而计算机大量的数据处理工作是加减运算, 原码表示就很不方便了。一个负数的原码符号位不动, 其余各位取相反码就是机器数的另一种表示形式 反码表示法。正数的反码与原码相同。设x原 =x0x1x2xn当 x0=0 时, x 反 =x0x1x2xn当 x0=1 时, x 反 =x0x1x2xn(3) )补码表示法( complement )设计补码表示法的目的是:使符号位能和有效数值部分一起参加数值运算从而 简化运算规则, 节省运算时间。 使减法运算转化成加法运算,从而进一步简化计算机中运算器的线路设计。 计算机是一种有限字长的数字系统,因此都是有模运算,超过模的运算结果都将溢出。n 位二进制整数的模是2n 。对于二进制数还有一种更加简单的方法由原码求得补码。正数的补码表示与原码一样, x 补 = x 原负数的补码是将原码符号位保持“1”之后其余各位取相反的码,末位加1 便得到补码,即取其原码的反码再加1x 补 =x 反 +1 。真值+0 和-0 的补码表示是一致的,但在原码和反码表示中具有不同的形式。8位补码机器数可以表示 -128 ,但不存在 +128 的补码,由此可知 8 位二进制补码能表示数的范围是 -128 +127 。应该注意,不存在 -128 的 8 位原码和反码形式。根据互补的概念, 一个补码机器数再求一次补就得到机器数的原码了。 定点数与浮点数:( 1)定点数( fixed-pointnumber )计算机处理的数据不仅有符号,而且大量的数带有小数, 小数点不占有二进制位而是隐含有机器数里某固定位置上。通常采用两种简单的约定:一种是约定所有机器数的小数点位置隐含在机器数的最低位之后,叫定点纯整数机器数, 简称定点整数。另一种约定是所有机器数的小数点位置隐含在符号位之后、有效数值部分最高位之前,叫定点纯小数机器数,简称定点小数。计算机采用定点数表示时, 对于既有整数又有小数的原始数据,需要设定一个比例因子,数据按比例因子缩小成定点小数或扩大成定点整数再参加运算,结果输出时再按比例折算成实际值。n 位原码定点整数的表示范围是-(2 n-1-1)x2n-1-1 , n 位原码定点小数的表示范围是-(1-2-(n-1 ) )x1-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 ),所以仅仅少于一位,最大值一下子减半。不过,有符号数的长处是它可以表示负数。因此,虽然它的在最大值缩水了,却在负值的方向出现了伸展。我们仍一个字节的数值对比:无符号数:0255有符号数:-128 - 0127同样是一个字节,无符号的最小值是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 字节) 十进制值10000001-12710000011-125.1111 1110-21111 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论