关于数据类型转换

MrEdifier 2010-11-17 04:59:58
今天看书突然想到:
在32位机,GCC下的int类型为32位,float类型为32位

int i=0x777;
float f=i;

说是float类型是以浮点格式存储,(1^s)*M*(2^E),由S,M,E的二进制存储组成一个float类型数据,
由此得i=111111111111,f=111111111111,GCC中的s为一位,M为8位,E为24位。
printf后,发现i和f的输出是一样的,我想问,为什么存储格式不一样,却能输出同样的结果?
难道是赋值的时候已经转换,而不是原封不动地赋值?
...全文
100 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
MrEdifier 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yyg990441 的回复:]

LZ程序写错了,试下在这个.
C/C++ code

#include<stdio.h>
int main()
{
int i=0xfedcba98;
float* p=(float*)&i;
printf("i->%d\n",i);
printf("*p->%f\n",*p);
return 0;
}
[/Quote]
不好意思,我少打一个*,但是我的测试程序是没问题的。
我刚对你的代码做了测试,*p->0,结果是。
yyg990441 2010-11-17
  • 打赏
  • 举报
回复
LZ程序写错了,试下在这个.

#include<stdio.h>
int main()
{
int i=0xfedcba98;
float* p=(float*)&i;
printf("i->%d\n",i);
printf("*p->%f\n",*p);
return 0;
}
MrEdifier 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lthyxy 的回复:]

GCC中的s为一位,M为8位,E为24位。
这样不是33位了。?
[/Quote]

我的意思是如果浮点的0x77777和整形的0x77777值相等么?
liutengfeigo 2010-11-17
  • 打赏
  • 举报
回复
GCC中的s为一位,M为8位,E为24位。
这样不是33位了。?
MrEdifier 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yyg990441 的回复:]

你写的代码是把i的值转换为浮点值再给f.
按照你的描述,代码要这样写:
int i = 0x777;
float* p = (float*)&i;
printf("%d->%f\n",i,*p);
[/Quote]
依然是不正确的结果,我把测试代码贴上来吧。

main()
{
int i=0x7777;
float p=(float*)&i;
printf("i->%d\n",i);
printf("*p->%d\n",*p);
}
yyg990441 2010-11-17
  • 打赏
  • 举报
回复
你写的代码是把i的值转换为浮点值再给f.
按照你的描述,代码要这样写:
int i = 0x777;
float* p = (float*)&i;
printf("%d->%f\n",i,*p);

69,371

社区成员

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

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