cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1587|回复: 0

关于51浮点数的存储

[复制链接]
发表于 2004-11-6 03:19:50 | 显示全部楼层 |阅读模式
Float   浮点形。  它是符合IEEE-754标准的单精度浮点形数据,在十进制中具有7 位
有效数字。FLOAT型据占用四个字节(32位二进制数),在内存中的存放格式如下:

字节地址(由低到高)0                  1               2                3
浮点数内容         MMMMMMMM         MMMMMMMM        E MMMMMMM       S EEEEEEE

其中,S为符号位,存放在最高字节的最高位。“1”表示负,“0”表示正。E为阶码,占

8位二进制数,存放在高两个字节中。注意,阶码E值是以2为底的指数再加上偏移量127,

样处理的目的是为了避免出现负的阶码值,而指数是可正可负的。阶码E的正常取值范围是
1~254,从而实际指数的取值范围为-126-127。M为尾数的小数部分,用23位二进制数表
示,
存放在低三个字节中。尾数的整数部分永远为1,因此不予保存,但它是隐含的。小数点位
于隐含的整数位“1”的后面。

例如浮点数124.75 = 42F98000H  在内存中的存放格式为

字节地址        +0         +1             +2          +3
浮点数内容  00000000     10000000       1 1111001    0 1000010

124.75D=1111100.11B=1.11110011*2E6
阶码=6D+127D=133D=10000101B
符号位=0

参考示例程序一:
typedef union{
float flt;
unsigned char fltc[4];
} Float;


main()
{
Float a;
unsigned char i;
a.flt=124.75;
for(i = 0; i < 4; i++)
printf("%x\t",a.fltc<i>);
printf("\n");
}

参考示例程序二:
main()
{
float a;
unsigned char i;
unsigned char *j;
a=124.75;
j = (unsigned char *)&amp;a;
for(i = 0; i &lt; 4; i++)
printf("%x\t",j<i>);
printf("\n");
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-5 00:42 , Processed in 0.497797 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表