进制和进制间的转换
漫谈:大家都知道关于数字的表达方式有很多种,但到底有多少种表达的方式呢?这可能是没有答案的。举个例子来看看:最早的人们为了记住他拥有的13根木棍,他只能在地上或者是其他什么地方画13条竖线来表示,就像下面这样:
1 1 1 1 1 1 1
1 1 1 1 1 1
虽然使用13条竖线来表示13根木棍很容易,但这样的表示方法也有很多的缺点,最直接一点就是如果要用1条竖线来表示1根木棍的话,那如果有100万根木棍甚至更多的呢?其结果是难以想象的。
后来我们的祖先开始用其他的符号来表示不同的数字,比如罗马人使用I、II、III、IV、V来表示1、2、3、4、5 这几个数字;中国人则使用壹贰叁等文字的形式来代替123 。
公元1500年后,阿拉伯数字开始在中东阿拉伯地区流行,以后慢慢发展到全世界,所谓的阿拉伯数字也就是大家都熟悉的1、2、3、4、5、6、7、8、9、0 的数字表现形式。
但像罗马数字,中国文字形的数字,阿拉伯数字这些文字都需要一个限定的范围,这个范围告诉我们一共有多少个数字,最大的那个是什么,如果超过了最大的数字后又该怎么表示?这些问题就构成了进制这个概念。
十进制:
我们来看下最熟悉也最常用的10个数字(1、2、3、4、5、6、7、8、9、0),这也就是我们常常说到十进制。 他们的特点是:
一共有十个数字,这也就是“十进制”这三个字中的“十”字得来的缘由;
他们都是逢十进一的特点。比如9+1=10 ,因为9在十进制里已经是最大了,那么再加上一就比9大了,该怎么办呢?解决的方法很简单,就是把9换成0 ,在0
的前面加上1,这就组成了10 。
十进制大家都很清楚,说这些只是为了让大家便于理解下面的内容,下面我们就讨论下“二进制”、“八进制”和“十六进制”,这才是我们这节主要的内容
。
二进制:
我们知道都知道十进制,但计算机比我们“笨”多了,他只认识“0”和“1”这两个数字,为此,要学习编程就要迁就计算机这个笨家伙,但只有“0”和“1”这两个数字该怎么用阿?
对了,只有两个数字,那就是二进制了。使用二进制对计算机来说有诸多优点,比如逻辑上表示真或者假,物理上表示开和关,此外,还能保证计算机存储简单安全
二进制的特点是:
1. 只有两个数字;
2. “0”和“1”;
3. 逢二进一;
4.任意两个单位上构成高一位置上的一个单位;
5.如01表示十进制的1;
6. 10表示十进制的2;
7. 101表示十进制的3;
二进制转换成十进制:
二进制转换成十进制可以用多项式来表示,但为了某些还没学习过多项式的朋友,我们这里就只介绍一个例子,请学习过多项式的朋友总结下就可以得出多项式的表达式,在这之后的“八进制”和“十六进制”也一样。
例子:将二进制的1011.1011这数字转换成十进制的数字
1011.1011=1*2^3+0*2^2+1*2^1+1*2^0+1*2^-1+0*2^-2+1*2^-3+1*2^-4
=8+0+2+1+1/2+0+1/8+1/16=11.11/16(11又16分之11)
(其中2是基数,2的指数从0开始到最大的指数3的个数和整数相同)
十进制转换成二进制:
要讲十进制转换成二进制,对于整数我们采取 “除2去余“,对于小数部分我们采取“乘2取整”的方法.
例:将十进制数字211.213转换成二进制数字:
我们取出整数部分211作除2去余运算,运算如下:
除式
商
余数
211/2
105 1
105/2
52 1
52/2
26 0
26/2
13 0
13/2
6 1
6/2
3
0
3/2
1 1
1/2
0 1
用整数除以2后得到的商再除以2,一直除到商为0结束 也就是除到没办法再除下去了为止。将余数从 从最下面的到最上面的的排列起来就是该整数的二进制数字,在本例中,二进制是11010011。
我们取出小数213进行乘2取整运算,运算如下:
乘式
结果的小数部分
结果的整数部分
0.213*2 0.426
0
0.426*2 0.852.
0
0.852*2 0.704
1
0.704*2 0.408
1
……
说明:小数部分要一直运算到乘式得到的小数部分是0为止,但某些十进制小数要真的全部转换成完整的二进制小数时需要运算很多步骤(就像本例),这个时候就要取决于你要的精度了,在本例中,我们只是要4位二进制小数而已,所以就没必要再计算下去。与整数的数字排列不同,小数部分是从上往下排列
,在本例中也就是0011
最后把整数部分和小数部分组合起来就是十进制211.213
的二进制表示11010011.0011
练习题:将十进制数字111.1111转换成二进制数字;将二进制数字111.1111转换成十进制数字。
2.八进制:
与电脑编程相关的除了二进制外还有八进制和十六进制,相信经过以上的内容的学习,你已经能想到什么是八进制了。那么接下来的八进制和十六进制的内容我们将直奔主题了。
2.1 八进制的特点
1.拥有从0到7八个数字;
2.逢八进一的特点
2.2 十进制与八进制相互转化
与二进制转换的道理基本上是相同的,只不过二进制转换十进制的方法是“除2取余,乘2取整”,而八进制转换的方法是 “除8取余,乘8取整”。下一部分的十六进制也将基本相同,请看者仔细比较。
例子:将十进制数字100.015转换成八进制数字(小数保留前四位),然后再将该八进制数字转换成十进制数字?
解:100.015分成整数100和小数0.015 ,对整数进行除8取余运算,过程如下:
除式 商 余数
100/8
12
4
12/8
1
4
1/8
0
1
根据从下往上的排列顺序,该整数部分的八进制形式就是144;
再对小数部分进行乘8取整运算,过程如下:
乘式
积的小数部分
积的整数部分
0.015*8 0.12
0
0.12*8 0.96
0
0.96*8 0.68
7
0.68*8 0.44
5
因运算步骤过多,而我们只需要保留前四位,故到此步运算结束,根据从上而
下的排列顺序 ,该0.015的小数部分的八进制形式为0.0075
所以,十进制数字100.015转换成八进制形式是144.0075
按题目要求,将得到的144.0075转换成十进制数字,运算过程如下:144.0075=1*8^2 +4*8^1+4*8^0+0*8 ^-1+0*8^-2 +7*8^-3+5*8^-4
=64+32+4+0+0+7/512+5/4096
=100.61/4096(100又4096分之61 )
(其中8是基数,8的指数从0开始到最大的指数2的个数和整数相同)
读者一定发现100.015转换成八进制后得到的数字再转换回十进制,两个数不相同。那是因为当100.015在转换成八进制的过程中使用了保留位数(也叫精度),并没有完全计算到底,所以得到的八进制数字也就转换不回原来的数字了,但如果在读者将一个可以完全转换成八进制数字的十进制数字进行没有保留的转换,那就能将得到后的八进制数字再次转换回十进制,且数字和原来一样
3.十六进制
十六进制的特点是:
有十六个数字,分别为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F ;其中的ABCDEF分别代表11、12、13、14、15、16这几个数字,他们仅仅代表一位,而不是像13这样的两位数,这一点要区分清楚
逢十六进一,即最该的数字是F,如F+1=11(此时的11表示的是17)
十六进制和十进制相互转换:
例子1:十进制数字207.61转换成十六进制数字(小数部分保留三位精度)
解答:将207.61分成207和0.61两部分,将整数进行除16取余,小数进行乘16取整运算,过程如下:
(整数运算)
除式
商
余数
十六进制的表示
207/16 12
15
F
12/16 0
12
C
所以该整数部分为CF,
(小数运算)
乘式
积的小数部分 积的整数部分 对应的十六进制
0.61*16
0.76
9
9
0.76*16 0.16
12
C
0.16*16 0.56
2
2
所以该小数部分为9C2
答:十进制数字207.61的十六进制是CF.9C2
例子2:将8B1.25转换成十进制数字
解答:8B1.25=8*16^2+B*16^1+1*16^0+2*16^-1+5*16^-2
=2048+176+1+1/8+5/256
=2225.37/256(2225又256分之37)
(其中16是基数,16的指数从0开始到最大的指数2的个数和整数相同)
非十进制的进制转换:
1.二进制与八进制
请读者仔细分析下面这个表格,观察各自对应的特点。
二进制 八进制 二进制
八进制
000
0
100
4
001
1
101
5
010
2
110
6
011
3
111
7
你一定发现到上面这个表格每三位二进制数字就对应一个八进制数字,我们的转换就是利用这个特点进行的。
二进制转换八进制:整数部分,将二进制位数从低位起至高位排列,三位一组(不足三位的在左边加0),然后利用该表对应填入相应的八进制形式。小数部分,将二进制位数从左往右排列,三位一组,不足三位的后面补0 ,然后按三位数取八进制数字。
例子:将二进制数字11111.1011转换成八进制数字。
解答: 11111.1011=011 111 .101
100
从表格我们知道011就是八进制的3;111是7;101是5; 100是6;
所以11111.1011=37.56
八进制转换二进制:将八进制数字里的每一位用三个二进制数字表示即可。左边多0省略,小数最右边是0也省略。
例子:13.14= 001 011 .001
100=1011.0011
2.二进制与十六进制
请你再分析下下面这个表格,并自行判断下该如何转换.
二进制 十六进制 二进制
十六进制
0000
0
1000
8
0001
1
1001
9
0010
2
1010
A
0011
3
1011
B
0100
4
1100
C
0101
5
1101
D
0110
6
1110 E
0111
7
1111 F
请你对照你的想法看看你想的对不对!
二进制转换十六进制:和二进制转换十六进制一样,整数部分,将二进制位数从低位起至高位排列,四位一组(不足四位的在左边加0),然后利用该表对应填入相应的十六进制形式。小数部分,将二进制位数从左往右排列,四位一组,不足四位的后面补0 ,然后按四位数取十六进制数字。
例子:将11111.1011转换成十六进制数字
解答: 11111.1011=0001
1111 .1011=1F.B
十六进制转换二进制:将十六进制数字里的每一位用四个二进制数字表示即可。左边多0省略,小数最右边是0也省略。
例子:将5DC.AB 转换成二进制
解答:5DC.AB=0101 1101
1100 . 1010 1011
八进制转换成十六进制:这个转换没有直接的转换方法,只能通过其中一个转换成二进制,再由二进制转换成需要的进制
P.S.除了十进制有百阿千阿的叫法外,其他的进制都不能这样叫。如1300,在十进制的角度上你可以叫他一千三百, 但在八进制和十六进制的角度上,你是不能这样叫的
|