内容正文:
第13章 数字化信息编码
第13章 数字化信息编码
13.1 二进制
13.2 计算机的计算
13.3 整数的编码
13.4 计算机中整数的特点
13.5 小数的编码
13.6 字符的编码
13.7 八进制和十六进制
13.4 计算机中整数的特点
13.4.1 整数加法示例
计算机中用补码编码整数,因此,补码编码整数的加法就是计算机中整数的加法。为了简明,设计算机中用一个字节存储整数。
例13-9 计算127-1
把127-1看成127+(-1)。
例13-10 计算127+127
结果为负数,
解码时先求出反码,
再得到原码,
二进制形式(-0000 0010)
计算结果为-2,算错了吗?
计算机按照运算规则进行了“正确”的计算,但结果却不正确。
计算机中只用一个字节存储整数且采用补码编码整数时,它“认识”的最大整数为127。
计算机中只用一个字节存储整数且采用补码编码整数时,它“认识”的最大整数为127,任何大于127的整数都不可能在计算机表示出来。
13.4.2 补码的符号位为何要参与运算?
补码的神奇之处在于它的符号位也要参与运算。符号位原本是正号和负号的编码,怎么能参与运算呢?要参与运算必须有?
位权,数值位有位权,但补码中符号位的位权是多少呢?
补码中符号位的位权与其它数值位的类似,只不过它的位权是负的。
补码中符号位的位权与其它数值位的类似,只不过它的位权是负的。
解码时,因为是负数,先求反码,再求原码,最后可得出这个整数是-32767。
补码的符号位也有位权,也算数值位,因此,解码补码时可以不区分正负数直接根据位权解码。1000 0000 0000 0001B=1×-10B1111B+1×10B0=1×-215+1×20=1×-32768+1=-32767。
解码补码
怎样求-128的补码呢?
先求原码再求反码最后加1得补码的方法行不通,因为,-128的原码需要9位,而计算机中只用一个字节编码整数。
实际求负整数的补码时,先舍弃负号将其绝对值转换成二进制形式,再取反(取反时0变1,1变0),最后加1得到补码。
加1时符号位要参与运算,谈到补码时符号位应看成数值位。
13.4.3 计算机中整数构成一个环
当计算机中用一个字节的补码编码整数时,计算机中整数的取值范围为-128到127。整数构成一个环是指127+1的结果为
-128,而-128-1的结果为
127。
例13-11 计算127+1。
例13-12 计算-128-1。
13.5 小数的编码
13.5.1 定点小数
小数如何编码呢?
以0.6为例,0.6用二进制表示为0.1001……B(1001为循环节),编码0.6有两个难点:
小数点如何编码?
无限循环的二进制小数如何存储?
怎样标识编码数据中小数点的位置呢?
通常规定编码中小数点的位置。
可以认为整数编码中也有小数点的,只不过小数点位于最低位的后面,即小数部分全为0。
如果编码规则为“小数点位于符号位与数值位之间;正数时符号位为0,负数时符号位为1;其余的不变”,则0.6就可以编码了。
这样的编码称为定点小数。
无法在计算机中精确地表示0.6 0.1001……B(1001为循环节)
0.6转换成二进制小数是无限循环小数,这就意味着无论采用多长的字节都无法在计算机中精确地表示0.6。
计算机也用固定长度的存储空间存储小数,
13.5.2 浮点数编码
计算机采用浮点数编码小数,而浮点数的编码格式与科学计数法有关。
可以用类似M×Rc的指数形式表示一个数,这种表示方法也称为科学计数法。例如:25.6=0.256×102, -0.00523=-0.523×10-2。
类似地,二进制数也可以用科学计数法表示,
如-1011.011B=-0.1011011B×10B100B,0.00110101B=0.110101B×10B-10B。
此处,10B中的B表示10为二进制数。
浮点数编码
一个R进制数,只要确定了M与C的值,该数就唯一确定了。对于二进制数,当要求小数点后第一位必须为1,即|M|为0.1……形式时,一个二进制数就对应于唯一确定的M和C。
浮点数编码由两部分组成,一部分是M,另一部分是C,其中M的绝对值小于1,C是整数,它们都可以用定点数方式编码。
采用浮点数编码一个十进制数时,首先把该数转换成相应的二进制数,再用科学计数法表示此二进制数,得到M和C,最后把M 和C用定点数的方式编码。
浮点数编码
浮点数编码中的M和C分别称为尾数和阶码,可以规定尾数M用“原码格式”的定点小数编码,而阶码C用补码编码。
当计算机中用4个字节的浮点数编码小数时,通常阶码占用1个字节,尾数占用3个字节。
小数0.1875的浮点数编码
0.1875=0.0011B=0.11B×10B-10B,
尾数0.11B用3个