信息技术导论
上QQ阅读APP看书,第一时间看更新

2.2 数值数据编码

所谓数值数据,是指数据本身有大小含义,比如年龄是20岁,身高是1.75m等,这样的数据称之为数值数据。而没有大小含义的数据,像一幅图像、一个音频或者一个字符等,都没有大小含义,称之为非数值数据。这两种数据的编码方法是不同的。

前面讨论了数制,知道了一个十进制如何转换成二进制并存储在计算机中。但是表示一个十进制数时,一般不仅仅有数位,还有正号和负号,还有小数点,那么这些非数位的部分如何表示呢?

2.2.1 符号位的表示

由于符号只有正和负两种,所以,很自然地考虑到用0表示正号,1表示负号,将符号位置于数据的最左侧。这样的处理过程称之为“符号位数字化”。为了区分符号位数字化前后的数据,分别引入两个术语“真值”和“机器码”。符号位数字化之前的数据称为真值,之后的数据称为机器码。例如:

+77 D=01001101B

-77 D=11001101B

2.2.2 符号位的运算

机器码解决了用0和1表示符号的问题。但是当数值数据进行运算时,符号位怎么办呢?如果让符号位和数值位一起参加运算,很多情况下会得到错误的结果,例如:(假设处理器字长为4位)

(+4)+(-5)=-1

若用机器码运算

(0100)+(1101)=(1)0001(真值为+1)

【说明】由于字长为4位,所以最高位的1溢出了,也就是丢掉了。

显然符号位直接参与运算,结果出错了。那么怎么防止这种错误的发生呢?为了解决这个问题,又引入了3种编码:原码、反码和补码。

原码:真值经过符号位数字化后,即得原码。

对于正数而言,其原码=反码=补码。

对于负数而言,其反码与补码的计算方法如下:

反码:符号位不变,其余位取反;

补码:反码+1。

现在利用补码进行上面的运算:

(+4)补码=0100

(-5)补码=1011

(0100)+(1011)=(1111)补码=(1110)反码=(1001)原码=(-1)真值

显然采用补码后,符号位像数值位一样参加运算,运算结果也是正确的。科学家经过严谨的数学证明发现,引入补码后,可以得到两个好处:

① 符号位可以像数值位一样参加运算,结果不会出错。

② 所有的减法都可以用加法实现,简化了电路。

2.2.3 小数点的表示

数值数据中的小数点该如何表示呢?由于计算机中采用二进制,只有0和1,可是无论使用0还是使用1,都无法将小数点和数值位分开,因为小数点的位置是不固定的。为了解决小数点的表示,引入了定点数和浮点数。

1.定点数

顾名思义,定点数是指小数点固定的数。由于小数点在数值数据中的位置不固定,所以考虑让小数点固定下来,这样由于小数点的位置固定了,也就不需表示了。可是什么样的数小数点的位置固定呢?整数和纯小数。

显然,整数的小数点默认在数的最右侧,而纯小数的小数点默认在数的最左侧,如图2-7所示。

图2-7 定点小数和定点整数

2.浮点数

对于既不是整数也不是纯小数的数值如何表示呢?我们采用定点整数+定点小数的形式来表示,用这种方式表示的数,由于小数点位置不固定,故称之为“浮点数”。

一个十进制数N可以写成:

N=10e×M

同理,一个二进制数N可以写成:

N=2e×M

其中,M为一个纯小数(用定点小数表示),e为一个整数(用定点整数表示),因此,浮点数的一般表示形式,如图2-8所示。

一个浮点数一般会由4部分构成:阶符+阶码+数符+尾数。例如,浮点数(-5.25)10的表示如图2-9所示。

图2-8 浮点数的表示

图2-9 浮点数的表示