计算机内部是以二进制形式表示数据和进行运算的;计算机内的地址等信号常用十六进制来表示,而人们日常又习惯用十进制来表示数据。这样要表示一个数据就要选择一个适当的数字符号来规定其组合规律,也就是要确定所选用的进位计数制。各种进位制都有一个基本特征数,称为进位制的“基数”。基数表示了进位制所具有的数字符号的个数及进位的规律。下面就以常用的十进制、二进制、八进制和十六进制为例,分别进行叙述。
一.常用的三种计数制
1.十进制(Decimal)
十进制的基数是10,它有10个不同的数字符号,即0、1、2、3、…、9。它的计数规律是“逢十进一”或“借一当十”。处在不同位置的数字符号具有不同的意义,或者说有着不同的“权”。所谓的“权”就是每一位对其基数具有不同的倍数。例如,一个十进制数为
123.45=1×102十2×101十3×100十4×10-1十5×10-2
等号左边为并列表示法.等号右边为多项式表示法,显然这两种表示法表示的数是等价的。
在右边多项式表示法中,1、2、3、4、5被称为系数项,而102、101、100、10-1、10-2等被称为该位的“权”。
一般来说,任何一个十进制数”都可以采用并列表不法表不如下:
N10=dn-1d n-2…d1d 0. d-1d-2…d-m
其中,下标n表示整数部分的位数,下标m表示小数部分的位数,d是0~9中的某一个数,即di∈(0,1,…,9)。同样,任意一个十进制数N都可以用多项式表示法表示如下:
N10=dn-1×10n-1十…十d1×101十d0×100十d-1×10-1十…十d-m×10-m
其中,m、n为正整数,di表示第i位的系数,10i称为该位的权。所以某一位数的大小是由各系数项和其权值的乘积所决定的。
2.二进制(Binary)
二进制的基数是2,它只有两个数字符号,即0和1。计算规律是“逢二进一”或“借一当二”。例如:
(101.01)2=1×23十1×22十0×21十1×20十0×2-1十1×2-2
任何一个二进制数N都可以用其多项式来表示:
N2 =dn-1×2n-1十dn-2×2n-2十…十d1×21十d0×20十d-1×2-1十d-2×2-2十…十d-m×2-m
式中任何一位数值的大小都可以用该位的系数项di和权值2i的积来确定。
3.十六进制(Hexadecimal)
十六进制的基数为16,它有16个数字符号、即0~9、A~F。其中A、B、C、D、E、F分别代表十进制数的10、11、12、13、14、15。各位之间“逢十六进一”或者“借一当十六”。各位的权值为16i。例如:
(2C7.1F)16=2×162十12×161十7×160十1×16-1十15×16-2
二.3种计数制之间的相互转换
对于同一个数,可以采用不同的计数制来表示,其形式也不同。如:
(11)10=(1011)2=(B)16
1.R进制转换成十进制的方法
具体的方法是先将其并列形式的数写成其多项式表示形式,然后,经计算后就可得到其十进制的结果。这种方法披称为按权展开法。对于一个任意的R进制数N都可以写成如下形式:
N=dn-1 dn-2…d1 d0d -1d-2…d-m
=dn-1×Rn-1十…十d1×R1十d 0×R0十d-1×R-1十…十d-m×R-m
其中,R为进位基数,Ri是对应位的权值,di为系数项,特此式求和计算之后,即可以完成R进制数对十进制数的转换。
例如,写出(1101.01)2、(10D)16的十进制数。
(1101.01)2=1×23十1×22十0×21十1×20十0×2-1十0×2-2,
=8十4十1十0.25
=13.25
(10D) 16=1×162十0×161十13×160=256+13=269
2. 十进制转换成二进触方法
十进制数转换成二进制数一般分为两个步骤,即整数部分的转换和小数部分的转换。
(1)整数部分的转换
除2取余法:这种方法是由于D10=N2=dn-1×2n-1十dn-2×2n-2十…d1×21十d0×20,所以具体方法是把给定的十进制整数除以2,取其余数作为二进制整数最低位的系数do,然后继续将整数部分除以2,所得余数作为二进制整数次低位的系数d1,一直重复下去,最后可以得到二进制整数部分。
例如,将(327)10转换成二进制数。
327 余数 各项系数
除以2= 163 … 1 d0
…… 81 … 1 d1
…… 40 … 1 d2
…… 20 … 0 d3
…… 10 … 0 d4
…… 5 … 0 d5
…… 2 … 1 d6
…… 1 … 0 d7
…… 0 … 1 d8
所以,(327)10=d8 d7 d6 d5 d4 d3 d2d1 d0=(101000111)2。
此方法可扩展为陈R取余法。如将R设为16,则可将十进制整数转变为十六进制整数。
减权定位法:因为D10=N2=dn-1×2n-1十dn-2×2n-2十…d1×21十d0×20,所以二进制多项式中的每一项都有自己的权值。若该项系数值为di=0,则该项值为0,否则di应为1。根据这一对应关系,可提出减权定位的转换方法:将十进制数依次从二进制高位权值进行比较:若够减则对应位di=1,减去该位权值后再往下比较;若不够减则对应值d i=0,越过该位与低一位的权值比较,如此进行直到余数为0为止。
例如,将(327)10转换成二进制数。因为512(29)>327>256(28),所以从权值256对应值开始比较。
减权比较 di 位权
327-256=71128
71<128 0 27
71-64=7 1 26
7<32 0 25
7<16 0 24
7<8 0 23
7-4=3 1 22
3-2=1 1 21
1-1=0 1 20
所以,(327)10=(101000111)2。
(2)小数部分的转换
转换的方法是采用乘2取整数表示法。由于D10=d-1×2-1十d-2×2-2十…d-m×2-m,所以具体方法是把给定的十进制小数乘以2,取其整数部分作为二进制小数的小数点后的第一位系数;然后再将乘积的小数部分继续乘以2,取所得积的整数部分作为小数后的第二位系数;依次重复做下去,就可以得到二进制小数部分。
例如,将(0.8125) 10。转换成二进制小数。
整数部分 系数部分
2×0.8125=1.625 1 d-1=1
2×0.625=1.25 1 d-2=1
2×0.25=0.5 0 d-3=0
2×0.5=1.0 1 d-4=1
所以,(0.8125)10=d0 d-1 d-2 d-3 d-4= (0.1101)2。
在计算中可以按照所需的小数点位数,取其结果位近似值。
此方法可以扩展为乘R取整法.如将R变为16,则可将十进制小数部分直接变为十六进制小数。
3.二进制与十六进制的转换
(1)二进制转换成十六进制
4位二进制数的所有组合可表示十六进制数的16个代码,它们之间的对应关系如下:
二进制: 00000001 0010 0011 0100 0101 0110 0111
十六进制:0123456 7
二进制: 10001001 1010 1011 1100 1101 1110 1111
十六进制:89ABCDE F
进制转换的具体方法:从小数点开始,分别向左、向右,每4位二进制数为一组用十六进制数值来书写。若小数点左侧位数不是4的倍数,则最左侧用0补充;若小数点右侧位数不是4的倍数,则最右侧用0补充。
例如,(110110111.01101)2=(0001 1011 0111.0110 1000) 2=(1B7.68) 16。
(2)十六进制转换成二进制
具体的转换方法是:将每个十六进制数用4位二进制数来书写,转化后最左侧或者最右侧的0在书写的时候可以省去。例如:
(7AC.DE)16=(111 1010 1100.1101 111)2
例1:把(5/16) 10转换成二进制数。
解:5/16=5×2-4=(101) 2×(0.0001) 2=(0.0101) 2
小数点向左移4位等于乘以2-4。
例2:把(19.125) 10转换成二进制数、十六进制数。
解:首先把整数部分(19) 10转换成二进制数:
(19)10=16十2十1=24十21十20=(10011) 2
再把小数部分(0.125) 10转换成二进制数:
0.125×2=0.25 0
0.25×2=0.5 0
0.5×2=1 1
所以,(0.125) 10=(0.001) 2。
把整数与小数部分合起来结果为
(19.125) 10=(10011.001) 2=(13.2) 16