1.1.4 计算机中的数制
数制是指表示数值的方法,有进位计数制和非进位计数制。
进位计数制是指按照进位的原则进行计数的数制,简称“进制”。
非进位计数制是指表示数值大小的数码与它在数中的位置无关的数制,简称“非进制”。如罗马数字就是典型的非进位计数制。
进位计数制具有下面的特点。
(1)使用固定个数的数码表示数值的大小。数码的个数R称为该数制的基数,数码在一个数中所处的位置称为数位。
(2)逢R进一。例如,十进制数由0~9这10个数字符号组成,基数为10,逢10进1。
(3)采用位权表示法。处在不同位置上的数字所代表的值不同,一个数字在某个固定位置上所代表的值是确定的,这个固定位上的值称为位权。各进位制中位权的值恰好是基数的若干次幂。
(4)任何一种数制表示的数都可以写成按位权展开的多项式之和。
例1:十进制数188.27可表示为:
1×102+8×101+8×100+2×10−1+7×10−2
例2:二进制数1101.10可表示为:
1×23+1×22+0×21+1×20+1×2−1+0×2−2
由于计算机中电路的通与断、电子元件的开与关分别代表1、0两个数值。因此,计算机中的数是用二进制表示的,在计算机中也采用二进制代码表示字母、数字字符、各种各样的符号、汉字等。在处理信息的过程中,可将若干位的二进制代码组合起来表示各种各样的信息。但由于二进制数不直观,人们在计算机上实际操作时,输入、输出的数均使用十进制,而具体转换成二进制编码的工作则由计算机软件系统自动完成。字母和各种字符在计算机中的传输普遍采用ASCII码(American Standard Code For Information Interchange),即美国标准信息交换码,它用7位二进制数来表达字母和各种常用字符。
对于汉字信息的表示比较复杂,我国有汉字几万个,常用的汉字也有7000多个,为了统一,我国制定了汉字编码标准,规定了一、二级汉字共6763个,用两个字节(16位二进制代码)来表示一个汉字进制转二进制。
由于计算机使用的进制除了十进制和二进制外,还有八进制和十六进制,为了规范,通常情况下进位计数制的书写标准如下。
(1)一般我们用角标表示不同进制的数。十进制用()10表示,二进制数用()2表示。
例如,(10101011)2表示的是10101011是一个二进制数,而(10101011)10 则表示10101011是一个十进制数。
(2)在数据后加一特定的字母表示它所采用的进制:B表示二进制,O表示八进制,D或省略表示十进制,H表示十六进制,具体如表1-1所示。
表1-1 不同进制的标注区别
由于二进制由数码0和1组成,如果一个数字中含有除了0、1之外的其他数码,那么这个数字就不可能是二进制数字。
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
十进制整数转换为二进制整数采用“除2取余,逆序排列”法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,并把最后的商1放在最高位依次排列起来。对于0和1这两个数字,则分别在前面添加0来补足两位(十进制的0和1用二进制表示为00、01)。
十进制小数转换成二进制小数采用“乘2取整,顺序排列”法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
例如,把十进制数字9.6875转换为二进制数值时的算式为(9.6875)10=(?)2。
具体计算方法如下:先把整数部分采用“除2取余,逆序排列”法,用2辗转相除至结果为1,然后将余数和最后的1从下向上倒序写就可以得到整数9的二进制数1001,具体步骤如下:
再用乘2取整法求出小数部分0.6875的二进制数。
0.6875×2=1.375 …… 取出整数1
0.375×2=0.75…… 取出整数0
0.75×2=1.50…… 取出整数1
0.5×2=1.00…… 取出整数1
∴(0.6875)10=(0.1011)2
最后得到结果(9.6875)10=(1001.1011)2。
由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为“按权相加”法。二进制数转换为十进制数时从最后一位开始算,依次列为第0、1、2…位,第n位的数(0或1)乘以2的n次方,得到的结果相加就是十进制数值。
例如,把二进制数字1010转换为十进制数字时的算式为:(1010)2=(?)10。
具体计算方法为:
(1010)2=(1×23+0×22+1×21+0×20)10
=(1×8+0×4+1×2+0×1)10
=(8+0+2+0)10
=(10)10