浮点数的计算机存储格式和二进制数之间的转换过程
2012-08-19 09:40
225 查看
1, IEEE的浮点数格式
短(单精度float)实数: 32位 1位符号 8位指数 23位尾数
长(双精度double)实数:64位 1位符号 11位指数 52位尾数
2, float和double都的尾数含有一个隐含为1,扩展性双精度则没有这个限制
3, 小数转换成二进制时,指数需要加上127
以单精度为例,阐述将10.25与二进制互相转换过程:
A, 将10.25转换成二进制数,
a, 转换整数部分 10 = 1*(2^3)+0*(2^2)+1*(2^1)+0*(2^0)
b, 转换小数部分,使用"乘2取整"的办法 (0.25*2=0.5) 0 (0.5*2=1) 1 0.25=01
c, 把数字写成规格化的二进制数形式, 10.25=1010.01=1.01001*(2^3) 3就是指数 1.01001舍弃最高位的1变成就是尾数01001(为什么要舍弃,因为1是隐含位,即所有的小数转换后整数部分都是1)
d, 将指数加上127转换成二进制就得到了8位的指数位 3+127 = 130 转换成二进制 1000 0010
e, 根据浮点数的格式可以写出10.25的二进制数表示了:
10.25的二进制数是: 0 1000 0010 01001 0000 0000 0000 0000 000
B,将二进制数还原成浮点数:0 1000 0010 01001 0000 0000 0000 0000 000
a, 去掉最高位的符号位变成 1000 0010 01001 0000 0000 0000 0000 000
b, 取用来表示指数的8位 1000 0010 因为在浮点数转换成二进制是指数是加过127的,所以这时要减去127,130-127=3,所以指数是3
c, 取剩下的23位 01001 0000 0000 0000 0000 000, 这23位实际上就是小数部分,在浮点数转换成二进制时,我们舍弃了最高位的1,所以要补回来当做整数,就变成了1.01001 0000 0000 0000 0000 000,由于指数是3,所以要乘上我们的指数,
1.01001 0000 0000 0000 0000 000 * (2^3) = 1010.01 0000 0000 0000 0000 000
d, 将1010.01 0000 0000 0000 0000 000小数点左边的转换成十进制整数就是10,进小数点右边转换成小数就是0.25=(0*2^(-1)+1*(2^-2))
转自http://hi.baidu.com/liuhuman/item/4b15a925f4ec9fd7a417b634
短(单精度float)实数: 32位 1位符号 8位指数 23位尾数
长(双精度double)实数:64位 1位符号 11位指数 52位尾数
2, float和double都的尾数含有一个隐含为1,扩展性双精度则没有这个限制
3, 小数转换成二进制时,指数需要加上127
以单精度为例,阐述将10.25与二进制互相转换过程:
A, 将10.25转换成二进制数,
a, 转换整数部分 10 = 1*(2^3)+0*(2^2)+1*(2^1)+0*(2^0)
b, 转换小数部分,使用"乘2取整"的办法 (0.25*2=0.5) 0 (0.5*2=1) 1 0.25=01
c, 把数字写成规格化的二进制数形式, 10.25=1010.01=1.01001*(2^3) 3就是指数 1.01001舍弃最高位的1变成就是尾数01001(为什么要舍弃,因为1是隐含位,即所有的小数转换后整数部分都是1)
d, 将指数加上127转换成二进制就得到了8位的指数位 3+127 = 130 转换成二进制 1000 0010
e, 根据浮点数的格式可以写出10.25的二进制数表示了:
10.25的二进制数是: 0 1000 0010 01001 0000 0000 0000 0000 000
B,将二进制数还原成浮点数:0 1000 0010 01001 0000 0000 0000 0000 000
a, 去掉最高位的符号位变成 1000 0010 01001 0000 0000 0000 0000 000
b, 取用来表示指数的8位 1000 0010 因为在浮点数转换成二进制是指数是加过127的,所以这时要减去127,130-127=3,所以指数是3
c, 取剩下的23位 01001 0000 0000 0000 0000 000, 这23位实际上就是小数部分,在浮点数转换成二进制时,我们舍弃了最高位的1,所以要补回来当做整数,就变成了1.01001 0000 0000 0000 0000 000,由于指数是3,所以要乘上我们的指数,
1.01001 0000 0000 0000 0000 000 * (2^3) = 1010.01 0000 0000 0000 0000 000
d, 将1010.01 0000 0000 0000 0000 000小数点左边的转换成十进制整数就是10,进小数点右边转换成小数就是0.25=(0*2^(-1)+1*(2^-2))
转自http://hi.baidu.com/liuhuman/item/4b15a925f4ec9fd7a417b634
相关文章推荐
- 汉字转换成拼音,拼音转换成汉字,字母边界之间汉字,取汉字拼音首字母的存储过程
- 计算机进制问题---浮点数转换为二进制数
- 浮点数在计算机内存中的存储格式
- 存储过程中日期格式的转换
- java.sql.Data java.util.Data的转换 及时间格式化后的两者之间的转换,数据库中时间存储格式
- 浮点数在计算机内存中的存储格式
- 计算机是如何存储浮点数的
- APP开发过程中Dp和Px之间的转换
- 不同字符编码格式之间的转换
- 常用功能之SimpleDateFormat 不同格式之间转换
- java中string与date(日期)格式之间的转换
- 浮点数float是如何在计算机里存储的?
- 计算机各进制之间的转换
- 将sql存储过程转换成mysql存储过程要改动的地方积累
- oracle数据库和java的Date格式之间的转换
- 浮点数的存储、类型转换知识点(面宝P34)
- Linux下常见音频格式之间的转换方法
- 存储过程的语法格式和使用
- 浮点数在计算机中存储方式(转)
- JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换