二进制转换算法.docx
《二进制转换算法.docx》由会员分享,可在线阅读,更多相关《二进制转换算法.docx(5页珍藏版)》请在冰豆网上搜索。
二进制转换算法
一、概念
1.十进制
十进制使用十个数字(0、1、2、3、4、5、6、7、8、9)记数,基数为10,逢十进一。
历史上第一台电子数字计算机ENIAC是一台十进制机器,其数字以十进制表示,并以十进制形式运算。
设计十进制机器比设计二进制机器复杂得多。
而自然界具有两种稳定状态的组件普遍存在,如开关的开和关,电路的通和断,电压的高和低等,非常适合表示计算机中的数。
设计过程简单,可靠性高。
因此,现在改为二进制计算机。
2.二进制
二进制以2为基数,只用0和1两个数字表示数,逢2进一。
二进制与遵循十进制数遵循一样的运算规则,但显得比十进制更简单。
例如:
(1)加法:
0+0=00+1=11+0=11+1=0
(2)减法:
0-0=01-1=01-0=10-1=1
(3)乘法:
0*0=00*1=01*0=01*1=1
(4)除法:
0/1=01/1=1,除数不能为0
二、进制转换
1.二进制与十进制数间的转换
(1)二进制转换为十进制
将每个二进制数按权展开后求和即可。
请看例题:
把二进制数(101.101)2=1*22+0*21+1*20+1*2-1+0*2-2+1*2-3=(5.625)10
二进制数转换为十进制数:
二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……
所以,设有一个二进制数:
01100100,转换为10进制为:
下面是竖式:
01100100换算成十进制
第0位0*20 = 0
第1位0*21 = 0
第2位1*22 = 4
第3位0*23 = 0
第4位0*24 = 0
第5位1*25 =32
第6位1*26 =64
第7位0*27 = 0
+
---------------------------
100
用横式计算为:
0*20+0*21+1*22+1*23+0*24+1*25+1*26+0*27=100
0乘以多少都是0,所以我们也可以直接跳过值为0的位:
1*22+1*23+ 1*25+1*26=100
(2)十进制转换为二进制
一般需要将十进制数的整数部分与小数部分分开处理。
整数部分计算方法:
除2取余法请看例题:
用2辗转相除至结果为1
将余数和最后的1从下向上倒序写就是结果
例如302
302/2=151余0
151/2=75余1
75/2=37余1
37/2=18余1
18/2=9余0
9/2=4余1
4/2=2余0
2/2=1余0
故二进制为100101110
十进制整数转二进制数:
"除以2取余,逆序输出"
例:
(89)10=(1011001)2
289
244……1
222……0
211……0
25……1
22……1
21……0
0……1
小数部分计算方法:
乘2取整法,即每一步将十进制小数部分乘以2,所得积的小数点左边的数字(0或1)作为二进制表示法中的数字,第一次乘法所得的整数部分为最高位。
请看例题:
例:
(0.625)10=(0.101)2
0.625
X2
1.25
X2
0.5
X2
1.0
将(0.5625)10转换成二进制。
(0.5625)10=(0.1001)2
1.125
1.25
1.5
1.0
2.二进制与十六进制数间的转换
二进制十六进制
00
11
102
113
1004
1015
1106
1117
10008
10019
1010A
1011B
1100C
1101D
1110E
1111F
(1)二进制数转换成十六进制数
二进制数转换成十六进制数方法如下,以二进制数1101110为例:
将二进制数从右面开始以四位为一组分组,最左面不够四位的补0,按上表查得对应的十六进制数,组合起来以后就成了。
4个2进制位为一个16进制数
如01011100,可看成是两组2进制数0101和1100,则这个数就是16进制的5C。
01101110的十六进制数是6E
(2)十六进制转换成二进制方法
十六进制转换成二进制方法如下,以十六进制数3E为例:
将十六进制的每一位转换成四位二进制数,不足四位的在左面补0,组合起来即可得到二进制数。
3E的二进制数是00111110,既是111110
3.10进制转16进制:
10转16
用传统的计算方式可以了,就是大于15小于256的10进制数除以16为的值为十位的16进制数,其余数为个位的16进制数,没余数则个位为0。
如61的16进制是3D,61除以16得3余13,3作十位数,13转成D为个位数。
16转10:
用相反的道理,将十位数乘以16加上个位数。
如5A,将5乘以16得80,加上A的10进制10,结果是90。
十六进制数转换成十进制数:
2进制,用两个阿拉伯数字:
0、1;
8进制,用八个阿拉伯数字:
0、1、2、3、4、5、6、7;
10进制,用十个阿拉伯数字:
0到9;
16进制
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。
字母不区分大小写。
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
所以,在第N(N从0开始)位上,如果是是数X(X大于等于0,并且X小于等于15,即:
F)表示的大小为X*16的N次方。
假设有一个十六进数2AF5,那么如何换算成10进制呢?
用竖式计算:
2AF5换算成10进制:
5*160 +F*161+A*162+2*163=10997
(别忘了,在上面的计算中,A表示10,而F表示15)
现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。
4.二进制转为8进制
二进制转为8进制,可以3位二进制位编为一组(不够左侧补0),然后从右边开始每三位按如下方式替换:
000---0,
001---1,
010---2,
011---3,
100---4,
101---5,
110---6,
111---7.
比如转换二进制数00那么分组为
001110101010100按照转换方法对应转换
1 6 5 2 4
所以00
(2)=16524(8)
又如转换为16进制
0000---0,0001---1,0010---2,0011---3
0100---4,0101---5,0110---6,0111---7
1000---8,1001---9,1010---A,1011---B
1100---C,1101---D,1110---E,1111---F
此时分组为4位二进制数为一组
比如转换二进制10,分组:
00101010100101011010
2 A 9 5 A