2.1 计算机中数制及转换
教学微视频
在日常生活中,人们通常使用十进制数,但在计算机内部采用二进制表示数据,为书写及使用方便,还引入了八进制数和十六进制数。
2.1.1 不同的进制
进位计数制是目前广泛使用的一种计数方法,我们日常生活中最常用的是十进制,计算机世界里各种类型的信息均采用二进制编码进行表示和存储,如图像、音频、视频等。除此之外,为了表示方便,有时也会使用八进制、十六进制等表示数据。关于进位计数制,我们首先应该了解基本符号、基数以及位权的概念。基本符号是指用来表示某种数制的基本符号,如二进制的基本符号为0和1;基数表示某数制可以使用的基本符号的个数,如二进制的基数为2,因为二进制只能用0和1两个基本符号表示;位权表示一个数值中每位数字符号的权值大小,如十进制234可以写成2×102+3×101+4×100,那么2的位权为102,3的位权为101,4的位权就为100。不同的进制有不同的运算规则和表示方法,此处介绍几种常用的进制。
1.二进制
在具有冯.诺依曼结构的计算机中,都采用二进制代码表示字母、数字以及各种各样的符号、汉字等。二进制的基数为2,基本符号是0和1,运算规则为“逢二进一,借一当二”,即当某一位计数达到2时就向高位进1,反过来向高位借1,那么在低位就相当于2。二进制中第i位的位权为2i-1。
2.八进制
在一些计算机编程语言中,常常以数字“0”作为开头来表明该数字是八进制,如果是负数,则以负号开头,例如,-087。八进制的基数为8,基本符号是0-7,运算规则为“逢八进一,借一当八”,八进制中第i位的位权为8i-1。
3.十进制
十进制形式是我们最熟悉的表达形式,十进制的基数为10,基本符号是0-9,运算规则为“逢十进一,借一当十”,十进制中第i位的位权为10i-1。
4.十六进制
十六进制的表示方式有很多,其中最常用的表示方式是将“0x”加在数字前,或在数字后加上小字 16。例如 0x3E6 和 3E616。十六进制的基数为16,基本符号是0-9、A-F,运算规则为“逢十六进一,借一当十六”,十六进制中第i位的位权为16i-1。
可以将上述内容归纳为表2-1,方便读者查阅,其中位权的表示方法仅适用于整数部分。
表2-1 键盘
进位制 | 运算规则 | 基数 | 基本符号 | 位权 |
---|---|---|---|---|
二进制 | 逢二进一,借一当二 | 2 | 0,1 | 2i-1 |
八进制 | 逢八进一,借一当八 | 8 | 0,1,2,3,4,5,6,7 | 8i-1 |
十进制 | 逢十进一,借一当十 | 10 | 0,1,2,3,4,5,6,7,8,9 | 10i-1 |
十六进制 | 逢十六进一,借一当十六 | 16 | 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F | 16i-1 |
2.2.2不同进位计数制间的转换
不同进位制数之间可以相互转换,但转换方法有所不同,初学进位制转换可以参考以下二进制、八进制、十进制与十六进制之间的对应关系,如表2-2所示。
表2-2 进制转换对应关系
二进制 | 八进制 | 十进制 | 十六进制 |
---|---|---|---|
0000 | 0 | 0 | 0 |
0001 | 1 | 1 | 1 |
0010 | 2 | 2 | 2 |
0011 | 3 | 3 | 3 |
0100 | 4 | 4 | 4 |
0101 | 5 | 5 | 5 |
0110 | 6 | 6 | 6 |
0111 | 7 | 7 | 7 |
1000 | 10 | 8 | 8 |
1001 | 11 | 9 | 9 |
1010 | 12 | 10 | A |
1011 | 13 | 11 | B |
1100 | 14 | 12 | C |
1101 | 15 | 13 | D |
1110 | 16 | 14 | E |
1111 | 17 | 15 | F |
1.二进制数与十进制数的相互转换
(1)二进制数转换为十进制数
二进制数转换为十进制数相对比较简单,只要将二进制数的各位数字与其相对应的位权相乘,然后累加所有乘积,那么得到的结果就是该数的十进制形式。确定各位数字的位权时,应把小数点作为分界点,小数点往左应从20开始,依次为21,22,23……,小数点往右应从2-1开始,依次为2-2,2-3,2-4……。
例如将二进制数1101.01转换为十进制数:
1101.01=1×23+1×22+0×21+1×20+0×2-1+1×2-2=8+4+0+1+0.5+0.25=13.75
结果为(1101.01)2=(13.75)10
(2)十进制数转换为二进制数
十进制数转换成二进制数,由于整数和小数的转换方法不同,一般会将整数部分和小数部分分别进行转换,然后拼接在一起。
①整数部分,整数部分的转换可采用“除2取余法”,基本思想是将需要转换的十进制数除以2,得到商和余数,商作为被除数除以2,再次得到商和余数,重复此步骤,直到商为0。将所得余数按照逆序排列就得到了该数的二进制形式。
例如将十进制数37转换为二进制数:
得到的余数按逆序排列为100101,因此(37)10=(100101)2
②小数部分,小数部分可采用“乘2取整法”,基本思想是将小数部分乘以2,并取出所得乘积的整数部分,将剩余的小数部分再次乘以2,并取出整数部分,重复此步骤,直到小数部分为0或者达到要求的精确度为止,最后将所取整数按顺序排列就是该数小数部分的二进制形式。
例如将十进制数19.75转换为二进制数:
结果为(19.75)10=(10011.11)2
2.二进制数与八进制数的相互转换
(1)二进制数转换为八进制数
由于八进制数的基数8是2的三次方,因此,二进制数转换为八进制数时,可以从小数点开始向左或向右,每3位二进制数为一组,若小数部分最后一组不足3位则在末尾补0。将每组二进制数转为其对应的八进制数,然后拼接在一起即可。
例如将二进制数10101.11转换为八进制数:
二进制数 10 101 . 110
八进制数 2 5 . 6
即(10101.11)2=(25.6)8
(2)八进制数转换为二进制数
八进制数转换为二进制数,从小数点开始向左或向右,将每1位八进制数用3位二进制数表示出来,然后拼接在一起,就将该数转换成了它的二进制形式。
例如将八进制数74.6转换为二进制数:
八进制数 7 4 . 6
二进制数 111 100 . 110
即(74.6)8=(111100.110)2
3.二进制数与十六进制数之间的转换
(1)二进制数转换为十六进制数
由于十六进制数16为2的四次方,因此,二进制数转换为十六进制数时,可以参照二进制向八进制转换的方法,从小数点开始向左或向右,每4位二进制数为一组,若小数部分最后一组不足4位则在末尾补0,将每组二进制数转为其对应的十六进制数,然后拼接在一起即可。
例如将二进制数11011010.101转换为十六进制数:
二进制数 1101 1010 . 1010
十六进制数 D A . A
结果为(11011010.101)2=(DA.A)16
(2)十六进制数转换为二进制数
十六进制转换为二进制数,可以参照八进制向二进制转换的方法,从小数点开始向左或向右,将每1位十六进制数用4位二进制数表示出来,然后拼接在一起,就将该数转换成了它的二进制形式。
例如将十六进制数6F.B4转换为二进制数:
十六进制数 8 D . A 3
二进制数 1000 1101 . 1010 0011
结果为(8D.A3)16=10001101.10100011)2
4.十进制数与十六进制数的相互转换
(1)十进制数转换为十六进制数
十进制数转换为十六进制数,可以参考十进制数转换为二进制数的方法,整数部分可采用“除16倒取余法”,小数部分可采用“乘16取整法”。还有一些相对比较简便的方法,比如,先将十进制数转换为二进制数,然后再将二进制数转换为十六进制数。
(2)十六进制数转换为十进制数
参考二进制数转换为十进制数,将其按权展开求和即可。
例如将十六进制数12C.A转换为十进制数:
(12C.A)16=1×162+2×161+12×160+10×16-1=(300.625)10
结果为(12C.A)2=(300.625)10