十进制分数转换为二进制数
 使用短除法。
 例如将十进制分数11/28转换为二进制数,过程如下:
 1、首先将分子分母分别转换成二进制 
 (11)10=(1011)2 
 (28)10=(11100)2 
 2、使用短除,借位时是借2,商只能是0或1 
 
      所以:11/28=1011/11100=0.01100100...
十进制小数转换为二进制小数
 十进制数的整数位是二进制数的整数位,十进制数的小数位是二进制数的小数位。两部分分开转换。
 整数部分 除以2取余,逆序排列。
 小数部分 乘 2 取整,顺序排列。
 例如转换十进制小数11.4,过程如下。
 计算整数部分,11转换为二进制位1011:
 计算小数部分0.4,首先将小数部分一直乘2,积的整数部分顺序取出:
 0.4*2=0.8      取0      |                               
 0.8*2=1.6      取1      |  顺
 0.6*2=1.2      取1      |  序
 0.2*2=0.4      取0      |  排
 0.4*2=0.8      取0      |  列
 0.8*2=1.6      取1      |
 0.6*2=1.2      取1      |
 0.2*2=0.4      取0      |
 可以看出0110是循环,因此小数部分的二进制是
 0.01100110……(循环0110)
 最终结果是整数位和小数位合并1101111.01100110……(2)
  
二进制小数转换为十进制小数
 使用按权展开求和法,小数点左边是2的正数次方,从0开始;小数点右边是2的负数次方,从-1开始。 
 例如将101.111(2)转换成十进制数
                 1*(2^2)+0*(2^1)+1*(2^0)       # 整数部分
+ 1*(2^(-1))+1*(2^(-2))+1*(2^(-3)) # 小数部分
                                              =5.875
  
附 python 版十进制与二进制转换
# coding=UTF-8
from decimal import Decimaldef dec2bin(n, bit=20):"""n, integer or float to convertbit, bits after pointreturn binary, string"""negative = Falseif n < 0:negative = Truen *= -1integer = int(n)decimal = n - integerbinary = ""if n == 0:return "0"while integer != 0:result = int(integer % 2)integer /= 2binary = str(result) + binaryif decimal != 0:i = 0decimal_bin = ""  # binary decimal after convertwhile decimal != 0 and i < bit:result = int(decimal * 2)decimal = decimal * 2 - resultdecimal_bin += str(result)i += 1binary = binary + '.' + decimal_binif negative:binary = '-' + binaryreturn binarydef bin2dec(n):"""n binary, support pointreturn integer or float"""negative = Falseif n < 0:negative = Truen *= -1integer = int(n)decimal = n - integerif integer != 0:integer_str = str(integer)length = len(integer_str)integer = 0for i in xrange(0, length):bit = int(integer_str[i])if bit == 1:integer += 2 ** (length - i - 1)elif bit != 0:print "invalid integer:" + str(n)if decimal != 0:decimal_str = str(decimal)[2:] # skip "0."length = len(decimal_str)decimal = 0for i in xrange(0, length):bit = int(decimal_str[i])if bit == 1:decimal += 2 ** (-1 * (i + 1))elif bit != 0:print "invalid decimal:" + str(n)result = integer + decimalif negative:result *= -1return resultdef testcases():for pair in [(125, '1111101'),(1.3, '1.01001100110011001100'),(2.5, '10.1'),(0, '0'),(-1, '-1'),(0.5, '.1')]:assert pair[1] == dec2bin(pair[0])for pair in [(-1001.1100, -9.75),(-1101, -13),(111.111, 7.875),(0.1101, 0.8125),(1001, 9),(0, 0),(0.1, 0.5)]:assert pair[1] == bin2dec(pair[0])print "all test case success"if __name__ == "__main__":# testcases()print bin2dec(0.5)
参考:
http://blog.csdn.net/caoguo_app_android/article/details/9955743















