浮点数在内存中的存储方式
2015-11-05 10:52
225 查看
任何数据在内存中都是以二进制的形式存储的。浮点数也不例外。浮点的存储方式与整数有一点区别就是:浮点的存储方式是采用:符号位+阶码+尾数的形式。
符号位:在计算机内存中,通常都是以一位表示正数(用0表示)或者负数(用1表示)
阶码:在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码,阶码指明了小数点在数据中的位置。它与科学计数法中的幂是一个道理。
尾数:指小数点后面的数
例:
将133.5f化为二进制数。首先将整数部分化为二进制数为
1000 0101
然后将小数部分化为二进制为0.1。则133.5的二进制数为
1000 0101.1
而在计算机中是怎么样存储这个数的呢?首先将这个二进制数用“科学计数法”的形式表示出来就是
1.0000 1011 * 2^7
这里阶码采用移码表示,对于float型数据其规定偏置量为127,阶码位数为8位(对于双精度来说,其规定的偏置量为1023。阶码位数为11位。),也就是说这里的阶码应该为127+7 = 134。将其化为二进制数为
1000 0110
由于规定小数点前面都为1,因此在计算机中,将不会存储小数点前面的1。这里的尾数就为00001011。其后全部补0,将其补充到23位。这里是正数,所以符号位为0。
在存储时,符号位在最前面,其次是阶码,最后放尾数。因此数字在内存中存储为:
0100 0011 0000 0101 1000 0000 0000 0000
其十六进制表示为:
0x43058000
以下为测试代码:
上机运行可得到输出结果为: 0x43058000
符号位:在计算机内存中,通常都是以一位表示正数(用0表示)或者负数(用1表示)
阶码:在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码,阶码指明了小数点在数据中的位置。它与科学计数法中的幂是一个道理。
尾数:指小数点后面的数
例:
将133.5f化为二进制数。首先将整数部分化为二进制数为
1000 0101
然后将小数部分化为二进制为0.1。则133.5的二进制数为
1000 0101.1
而在计算机中是怎么样存储这个数的呢?首先将这个二进制数用“科学计数法”的形式表示出来就是
1.0000 1011 * 2^7
这里阶码采用移码表示,对于float型数据其规定偏置量为127,阶码位数为8位(对于双精度来说,其规定的偏置量为1023。阶码位数为11位。),也就是说这里的阶码应该为127+7 = 134。将其化为二进制数为
1000 0110
由于规定小数点前面都为1,因此在计算机中,将不会存储小数点前面的1。这里的尾数就为00001011。其后全部补0,将其补充到23位。这里是正数,所以符号位为0。
在存储时,符号位在最前面,其次是阶码,最后放尾数。因此数字在内存中存储为:
0100 0011 0000 0101 1000 0000 0000 0000
其十六进制表示为:
0x43058000
以下为测试代码:
#include <stdio.h> int main() { float num = 133.5f; int *p = (int *)# printf("0x%x\n", *p); return 0; }
上机运行可得到输出结果为: 0x43058000
相关文章推荐
- Mac 使用Homebrew进行软件包管理
- mongodb在死机重启后连接失败
- php中英文字符串截取函数(包括html)
- 03-27---UIScrollView笔记
- sema api
- MySQL数据库文件
- WdatePicker时间插件
- URL里汉字转码
- php接受通过HTML表单提交的信息时
- Python爬虫:获取糗事百科笑话
- pdfkit安装使用
- angularJS常见问题汇总
- 多线程程序设计
- 吾道——快
- File 写入/n 到txt识别不了
- 为Symfony2和Redis正名,基于PHP的10亿请求/周网站打造
- SpringBoot学习(一)入门
- 在 Xcode 7 中安装 Alcatraz
- jQuery EasyUI使用教程之在面板中创建复杂布局
- leetcode-Happy Number