一、浮点数的简介
计算机作为计算的工具,必然要支持小数。在计算机中,小数的类型有两种,一种是定点数定,就是表示小数点的位置是固定的。还有一种是浮点数,浮点数的小数点是浮动的,小数点后面的小数位数不固定。
二、浮点数的存储方式
在IEEE-754标准中,浮点数的存储格式是这样的:
S是符号位,用来表示正负,0表示正,1表示负,只占1bit。
E是指数位,用来存储“浮点数表示成科学计数法形式时”的幂次。注意:E=常数+e,其中e就是2的幂次,常数为127
M是尾数,就是浮点数表示成科学计数法形式时小数点后面的数。
三、如何将浮点数转换为二进制数
1、将浮点数分为两部分,整数和小数部分。整数部分依旧采用“除2取余,逆向取值”的方法;而小数部分则乘2取整,直到余下的小数为0或者满足精度要求为止,然后顺序取值(即最先得到的整数为最高位,最后得到的整数为最低位)。
若采用科学计数法来表示的话,就是:
我们知道浮点数分为单精度和双精度。
若是单精度,则占4个字节,E占8位,M占23位,再加上S段,总共就是32位,刚好也是4个字节,两者是一致的。
若是双精度,则占8个字节,E占11位,M占52位,再加上S段,总共就是64位,刚好也是8个字节,这两者也是一致的。
单精度:
若是单精度,那么E就占8位,取值范围就0—255,且e=E-127,所以e的取值范围就是-127~128。
那么,接下来,我们就可以开始计算了:
显然,S=0,因为58.625是正数。
而E=e+127=5+127=132,转换成二进制就是1000 0100。
M则取小数部分,所以M=1101 0101。
所以,最终58.625在内存存储的二进制就是
由于单精度占4个字节,所以要在不改变数值的大小的前提下将位数补齐,所以才在小数后面补0。
若是-58.625,那就只需把S改成1即可,其他位不变。
双精度:
若是双精度,那么E就占11位,取值范围就是0—2047(即2048-1=2^11-1),且e=E-1023,所以e的取值范围就是-1023~1024。
接下来,我们再开始计算双精度的二进制:
显然,S=0,因为58.625是正数。
而E=e+1023=5+1023=1028=1028的二进制。
M则同样取小数部分,所以M=1101 0101。
所以,双精度的58.625在内存中的二进制存储就是:
同样,若是-58.625,则只需把S改成1即可,其他位不变。
最后提供一个可以在线转换的网站:在线浮点数转二进制
原文出处:浮点数十进制与二进制之间的转换