尽管计算机使用二进制,但计算机中的二进制与数学中的二进制差别很大。计算机中没有正负号,没有小数点,……,只有(只能模拟)“0”和“1”,计算机使用了“纯粹”的二进制。现实世界中的数据必须编码成由0和1组成的“数串”,计算机才能存储、识别和处理。编码后的数据可称作机器数,被编码的数据可称作真值。由于不同类型的数据采用了不同的编码规则,不同的数据可能有相同的编码结果。只有确定了编码规则才能由机器数得到真值。
正负号的编码看似简单,却大有学问。小数点的位置不固定,如何编码是个挑战。一个字符具有多种编码,输入时有输入码(输入法),存储时有机内码,输出时有字形码。用0和1编码字符的形状时需要一点想象力。
计算机根据编码的运算规则进行计算,不同的编码对应不同的运算规则。计算机中采用补码编码整数是因为补码整数加减法的运算规则非常简单。补码的特点也就是计算机中整数的特点。编码小数时,通常先把十进制小数变成二进制小数,再把二进制小数编码成01串。十进制小数转化成二进制小数时通常会得到无限的二进制小数,因此,无论计算机中用多长的存储单元也不可能精确地存储大部分的十进制小数。计算机中的小数多为近似数。
计算机是一台“整数有范围,小数有精度”的机器。
C语言提供了使用计算机所需的直观的命令,作为非计算机专业的学生,无需掌握本章的知识照样可以借助C语言使用计算机。工具的原理不应也不会成为使用工具的障碍。