众所周知,计算机是由硬件和软件组成,其中硬件系统主要由运算器,控制器,存储器,输入设备和输出设备5大部分组成,将运算器和控制器集成在一块芯片上,就构成了我们熟悉CPU.但是我们今天要讨论不是这些玩意儿,而是在计算机内部数据和文字的表示方法,你可能马上会想:这还用讨论么,不就是一些数字和英文字母嘛!非也,我只能说你图样图森破!
接触过的人都知道,我们所使用的计算机只认识0和1,其他的一概不认识,中文,英文,梵文神马的全都靠边儿站,根本不鸟他们。那我们看到的13145201314数字串以及各种文字是如何表示呢?这是值得每个学习计算机技术的人思考和研究的问题。
先来了解最简单的数字吧。各种数值在计算机中表示的形式称为机器数,也叫做机器码,采用二进制计数制,数的符号用0和1表示,小数点则隐含表示而不占用实际位置。机器数对应的实际数值大小称为数的真值。
数据格式
1定点数
顾名思义,就是约定机器中的所有数据的小数点的位置是固定不变的。由于约定了小数点的位置,因此就不再使用实心点“.”来表示了。理论上讲,小数点位置固定在哪一位偶可以,但是通常将数据表示成纯小数或者纯整数。


定点数表示数的范围受字长限制,表示数的范围有限,且精度也有限,因此在机器中,常用定点纯整数表示

2浮点数
鉴于浮点数所能表示的数值范围比较小,而且运算中很容易因为结果超出范围而溢出,于是引入了浮点数,即小数点位置不固定的数,其所能表示的数的范围更大。
浮点数的表示格式如下:

IEEE 754是由IEEE制定的有关浮点数的工业标准,被广泛采用。其标准的表示形式如下:

那么浮点数表示的数据范围有多大呢?

数的机器码表示
在计算机中对数据进行运算操作时,符号位如何表示呢?是否也同数值位一起参加运算操作呢?如参加,会给运算带来什么影响呢?为了妥善地处理这些问题,就产生了把符号位和数值位一起编码来表示相应的数的各种表示方法,如原码、补码、反码、移码。为了区别一般书写表示的数和机器中这些编码表示的数,通常将前者称为真值,后者称为机器数或者机器码。
1原码


2反码

3补码


4移码


下面以定点整数为例,我们以数轴的形式给出原码、反码、补码的数值表示范围和可能的数码组合情况

同样我们以十进制整数为例,给出其二进制和其各种码的表示形式,大家可以思考并从中找出规律

综上所述,我们可以得到这样一些结论:
1 一个正整数,当用原码、反码、补码表示时,符号位都固定为0,用二进制表示的数位值都相同,即三种表示方法 完全一样;
2 一个负整数,当用原码、反码、补码表示时,符号位都固定为1,用二进制表示的数位值都不相同。此时由原码表示法变成补码表示法的规则如下:
(1)原码符号位为1不变,整数的每一位二进制数位求反得到反码
(2)反码符号位为1不变,反码数值位最低位加1,得到补码。
3 由上表中0的表示可以看出,0在原码和反码中有两种表示,而在补码和移码中则由唯一的编码;
4 整数的补码值和移码值差别仅在于符号位不同。
关于各种码制的运算问题,如果后面的学习中遇到了,会再次详细研究的。