十进制转二进制和二进制转十进制的算法是很多初学者头疼的问题,觉得很难掌握。这里,我通过举例说明这两种进制的转换方法。
(一)十进制(整数)转二进制:
用2辗转相除至结果为1
将余数和最后的1从下向上倒序写
就是结果。
例1:将405转换成二进制的数。
解:405/2=202余1(注意这个1将写在二进制数的最后面)
202/2=101余0
101/2=50余1
50/2=25余0
25/2=12余1
12/2=6余0
6/2=3余0
3/2=1余1(注意这个1将写在二进制数的最前面)
故405转换成二进制的数为110010101
例2:将302转换成二进制的数。
302/2
=
151
余0
(注意这个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
(注意这个1将写在二进制数的最前面)
故302转换成二进制的数为100101110
(二)二进制转十进制
从最后一位开始算,依次列为第0、1、2...位
第n位的数(0或1)乘以2的n次方
得到的结果相加就是答案
例如:1101011.转十进制:
第0位:1乘2的0次方=1
1乘2的1次方=2
0乘2的2次方=0
1乘2的3次方=8
0乘2的4次方=0
1乘2的5次方=32
1乘2的6次方=64
然后:1+2+0
+8+0+32+64=107.
二进制1101011=十进制107.对十进制小数乘2得到的整数部分和小数部分,整数部分既是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分.
如此不断重复,直到小数部分为0或达到精度要求为止.第一次所得到为最高位,最后一次得到为最低位
如:0.25的二进制
0.25*2=0.5
取整是0
0.5*2=1.0
取整是1
即0.25的二进制为
0.01
(
第一次所得到为最高位,最后一次得到为最低位)0.8125的二进制0.8125*2=1.625
取整是10.625*2=1.25
取整是10.25*2=0.5
取整是00.5*2=1.0
取整是1即0.8125的二进制是0.1101(第一次所得到为最高位,最后一次得到为最低位)
十进制小数→→→→→八进制小数
方法:“乘8取整”
0.71875)10
=(0.56)8
0.71875*8=5.75
取整50.75*8=6.0
取整6
即0.56十进制小数→→→→→十六进制小数方法:“乘16取整”例如:
(0.142578125)10=(0.248)16
0.142578125*16=2.28125
取整20.28125*16=4.5
取整40.5*16=8.0
取整8即0.248
负数转换为二进制,就是将其相反数(正数)的补码的每一位变反(1变0,0变1)最后将变完了的数值加1,就完成了负数的补码运算。这样就变成了二进制。
将-1变成二进制。
①首先确定二进制的位数,假定为16位,即可以表示-32768到32767的所有十进制整数。
②将-1的相反数,也就是1表示为二进制0000
0000
0000
0001(十六进制表示为0x0001)
(由于四位二进制可以表示为一位十六进制,故一般将二进制按四位进行分段表示)
③将这个二进制变反,可以得到1111
1111
1111
1110(十六进制HEX表示为0xFFFE)
④将变反后的数值加上1,得到-1的二进制表示1111
1111
1111
1111(十六进制表示0xFFFF)
进制转换,仅仅是把绝对值做“进制转换”。
正负号,不可变动。
如:-617(十进制)
=-10 0110 1001(二进制)
=-1151(八进制)
=-269(十六进制)