有关单精度浮点数在计算机内部的存放格式编程的疑问

雪域迷影 2010-11-03 10:45:18
显示并分析浮点数float在计算机内部的存放格式
要求:根据浮点数在通用计算机的IEEE 754标准存储格式,用vc++编写程序实现显示功能,之后自己举例验证,分析格式,验证所列举的与实际显示的是否一致。
我写了下面这个程序,

#include<stdio.h>
void Float(void *p)
{
long c;
int i,b[32];//存整数4个字节
c=*(long *)p;//p从空指针形式强制转换为long型 重要
for(i=0;i<32;i++)
{
b[i]=c&1;//通过空指针得到的一块数据,移位查看
c=c>>1;//右移
}
printf("y=");
for(i=31;i>=0;i--)
printf("%d",b[i]);
printf("\n");
}

int main()
{

float s;
scanf("%lf",&s);
Float(&s);


}


但是在VC6.0和VC2005不通过,会出现Runtime运行时错误,
在C-free下可以通过。
不知道是为什么,请高手帮忙看一下!
...全文
166 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
LiRnlidong 2012-02-16
  • 打赏
  • 举报
回复
比如我在C-free中运行时输入一个十进制数:
1
输出结果为:
001111111000000000000000000000000
这个结果是正确的啊,它的阶码S=01111111,是127.你看错了,不是126,符合IEEE754标准存储格式
bluejays 2010-11-03
  • 打赏
  • 举报
回复
据说是vc的bug,把这两行都改了再试试
float s=1.234;
scanf("%f",&s);
雪域迷影 2010-11-03
  • 打赏
  • 举报
回复
但是改成scanf("%f",&s);还是会出现运行时错误啊,
我感觉问题的关键不在这。VcC2005改完之后出现结果一闪
而过,而且不是想要的结果。
比如我在C-free中运行时输入一个十进制数:
1
输出结果为:
001111111000000000000000000000000
这又是为什么呢,为什么1在计算机中的浮点数格式中
阶码是011111110,十进制表示就是126,而不是127呢?
貌似我这个程序有很大问题,哪位能帮忙改一下,最好能在VC6.0
下运行通过的,麻烦了!
bluejays 2010-11-03
  • 打赏
  • 举报
回复
scanf("%lf",&s);
scanf见到%lf,会给&s的地址按照double的格式写入8个字节,但是s只占用4个字节,多出来的4个字节覆盖了什么,那就不一定了
bluejays 2010-11-03
  • 打赏
  • 举报
回复
float变量要用"%f","%lf"用于double类型
scanf("%f",&s);

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧