本文前面涉及的数据均为整型数据,实型数据则拆分开放在后面单独讲解。将复杂问题简单化,拆分开各个击破。
-------------------------------------------------------------------------------------------------------------------------
Part I 整型部分
(1)十进制与二进制的相互转化。
十---->二:十进制数除以2,得到一个商和余数(余数无非 0/1),余数单单保存。
拿得到的商继续除以2,又得到一个商和余数。保存余数。继续除以2...
直到除得的商为0.把除得的余数按先后顺寻从低位到高位排起(个位开始),
所得的数即为转化好的二进制数。
例如: 89(10)--->1011001(2)
商 余数
89/2 44 1
44/2 22 0
22/2 11 0
11/2 5 1
5/2 2 1
2/2 1 0
1/2 0 1
余数按先后顺寻从低到高排列。得到的就是二进制数1011001 。
二--->十:二进制数从低位开始,位上的值乘以进制数数的N次幂,然后求各个结果的和,
得到的就是所求的十进制数。
例如:10110(2)--->14(10)
个位: 0*2^0=0 (0乘以2的0次幂)
十位: 1*2^1=2 (0乘以2的1次幂,下面以此类推。。。)
百位: 1*2^2=4
千位: 0*2^3=0
万位: 1*2^4=8
0+2+4+0+8=14
转化十进制的结果为14
(2)十进制与八进制的相互转化。
十--->八:十进制转八进制方法和转二进制基本一样。不同的是除数改成了8.直接上例
例如: 385(10)--->601(8)
商 余数
385/8 48 1
48/8 6 0
6/8 0 6
结果就是601 (6/8 商不够1.余数只能为6...当被除数小于除数时,余数为被除数)
八--->十:和二进制类似。直接上例
例如:407(8)--->263(10)
个位: 7*8^0=7
十位: 0*8^1=0
百位: 4*8^2=256
结果为256+0+7=263
(3)十进制与十六进制的相互转化。
十--->十六:方法同上,以后不再赘述
例: 589(10)--->24D(16)
商 余数
589/16 36 13(用16进制的D表示)
36/16 2 4
2/16 0 2
结果为24D
十六--->十:
例: A3F40D(16)--->10744845(10)
个位: 13*16^0=13
... 0*16^1=0
... 4*16^2=1024
15*16^3= 61440
3*16^4=196608
10*16^5=10485760
结果10744845
(4)二进制、八进制、十进制、十六进制之间相互转化对照表
二进制数(仅4位的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 = 8 = 8 = 10
1001 = 9 = 9 = 11
1010 = 10 = A = 12
1011 = 11 = B = 13
1100 = 12 = C = 14
1101 = 13 = D = 15
1110 = 14 = E = 16
1111 = 15 = F = 17
熟记此表,各进制转换就一目了然了。。。
二--->十六
111111011010010110011011(这是一个2进制数)
先把它所包含的数字分成4个4个在一块,如下所示:
1111 1101 1010 0101 1001 1011
根据上述常用表可以得到
1111=F
1101=D
1010=A
0101=5
1001=9
1011=B
那么它所对应的16进制数就是“FDA59B”
十六---->二
FD5(16)--->1111 1101 0101(2)
F=1111
D=1101
5=0101
二--->八
1111010011000101(2)--->172305(8)
把二进制数3个放一起。001 111 010 011 000 101
对照表得到:
001=1
111=7
010=2
011=3
000=0
101= 5
结果 172305
八--->二
7035(8)--->111000011101(2)
7=111
0=000
3=011
5=101
结果111 000 011 101
十六--->八(互转)
直转换的方法没找到,这个有待牛人的出现。
相对简单的方法就是:使用二进制作为中间结果会比使用十进制还简单,
例如:
八进制的:1234567
转换为二进制是每个数字转换为三位二进制:001 010 011 100 101 110 111
然后把这些数字从右边开始进行按四位分组:0 0101 0011 1001 0111 0111
然后从右边每四位组依次对应一个16进制数:053977
Part II 实型部分
(1)二--->十:将实型数据拆分为整数和小数部分。整数部分前已经学习,现在主要看小数部分。
从小数点开始,后一位的值乘以进制数的负一次幂,后二位的值乘以进制数的负
二次幂,以此类推。。。
例如:110.101(2)--->6.625(10)
小数部分0.101=(1*2^-1) + (0*2^-2) + (1*2^-3)=0.5+0+0.125=0.625
(注意小数部分是从-1此方开始,而整数部分是从0次方开始。这个要牢记)
110.101(2)=6.625(10)
(2)8进制,16进制转换10进制,将“1*2的-1次方+0*2的-2次方+1*2的-3次方”里面的乘号后面的“2”分别换成“8”和“16”
例如:12.704(8)--->10.8828125
0.704=(7*8^-1) + (0*8^-2) + (4*8^-3)=0.875+0+0.0078125=0.8828125
B4.F2D(16)--->180.948486328125(10)
0.F2D=(15*16^-1)+(2*16^-2)+(13*16^-3)=0.9375+0.0078125+0.003173828125=0.948486328125
(3) 十--->二:同样和上面的一样。把实型拆分成整数和小数。
小数:拿整体的小数乘以进制数,然后取整记录下来,(二进制得到的整数非0即1。
这符合二进制数的组成)。 取整后的小数部分继续乘以进制数,直到得到的小数部分为0。
然后取出来的整数按正序排列,这和整数部分倒序排列恰恰相反
老规矩。上例:
10.45(10)--->1010.0111001100110011(2)
0.45*2=0.9 取整为0 余0.9
0.9*2=1.8 取整为1 余0.8
0*8*2=1.6 取整为1 余0.6
0.6*2=1.2 取整为1 余0.2
0.2*2=0.4 取整为0 余0.4
0.4*2=0.8 取整为0 余0.8
后面开始1.6循环。。。结果约等于1010.0111001100110011(1100循环。。。)
(4)十转八、十六进制方法类似。
80.140625(10) = 120.11(8)
80/8 0 0.140625*8 取 1
10/8 2 (1.125-1)*8 取 1
1/8 1 (1.0-1)*8 取 0
1032493.13671875(10) = FC12D.23(16)
1032493/16 13 0.13671875*16 取 2
64530/16 2 (2.1875-2)*16 取 3
4033/16 1 (3.0-3)*16 取 0
252/16 12
15/16 15
(5)二进制转为八进制
采用三位二进制数合为一位八进制数的方法。与二进制转十六进制相似。
八进制数转为十六进制
八进制先转为二进制,再转为十六进制