黑马程序员技术交流社区

标题: 十进制小数转与二进制小数互转 [打印本页]

作者: cheenbee    时间: 2015-8-7 22:52
标题: 十进制小数转与二进制小数互转
一个十进制数:ABC.DEF = A*10^2 + B*10^1 + C*10^0 + D*10^-1 + E*10^-2 + F*10^-3
一个二进制数:abc.def = a*2^2 + b*2^1 + c*2^0 + d*2^-1 + e*2^-2 + f*2^-3
这是不同进制的数值表示的根本
在计算机里整数和小数的表示方法是不同的
小数是用浮点数表示的 先表示有效数字 ,然后标记小数点位置 所以称为浮点数
file:///var/folders/yd/kr4kpn494919y38fd91y2gk80000gn/T/WizNote/1fe2d181-3de7-403e-a248-1a54eded9c4a/index_files/2991646.png

file:///var/folders/yd/kr4kpn494919y38fd91y2gk80000gn/T/WizNote/1fe2d181-3de7-403e-a248-1a54eded9c4a/index_files/6790028.png


深度剖析:(仔细认真想想,就可以明白)
以 十进制数 25.625 为例

整数部分:
25 = 1*2^4+1*2^3+0*2^2+0*2^1+1*2^0         ---------->11001
   每次除2,相当于是上式中每一项的幂减一,余数则是每一次除2前的多项式中0次幂项的因子

    详解 25第一次除 2:
   ( 1*2^4+1*2^3+0*2^2+0*2^1+1*2^0 )/2=( 1*2^3+1*2^2+0*2^1+0*2^0 )
    余数为:1*2^0 中的 1
    以此类推,小数的每次乘 2 也同理

小数部分:
0.625 = 1*2^-1 + 0*2^-2 + 1*2^-3
每次乘2,相当于是上式中每一项的幂加一,得到的整数则是每一次乘2后的多项式中0次幂项的因子

至于反向转换,整数部分从右向左,小数部分从左向右,所有位的位权相加(在此方向无所谓)
                      整数部分与小数部分中2的次幂项相当于一个整数的数轴,由0向两侧延伸
比如对于一个二进制数:11001.101
只需要计算1*2^4 + 1*2^3 + 0 + 0 + 1*2^0 + 1*2^-1 + 0 + 1*2^-3 = 25.625即可

人们熟悉十进制的计算,所以手工转换时人们考虑的是每一个二进制位代表的是十进制的多少,然后十进制相加;而不会考虑每一个十进制位代表的是二进制的多少,然后二进制相加。


作者: cheenbee    时间: 2015-8-7 22:55
好流弊的样子
作者: 墨琰    时间: 2015-8-8 22:18
真的好厉害  嘎嘎的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2