IDE是vs2010下
int main()
{
int i=5;//i二进制=00000000 00000000 00000000 00000101
float f=i;//f二进制=(0)(1000000 1)(0100000 00000000 00000000),由IEEE754标准表float示法而来,
//()内依次为:符号, 阶码, 尾数
int ii=(int )&f;//ii二进制=f二进制=(0)(1000000 1)(0100000 00000000 00000000),
//()内依次为:符号, 阶码, 尾数
printf("%d,%d,%d",sizeof(int),sizeof(float),sizeof(int *));//4,4,4
printf("%dn%dn%dn",i,f,ii);//printf后ii=1075052544,对应二进制=(0)(1000000 0001)(0100 00000000 00000000),
//符号, 阶码, 尾数,尾数后补32个0后刚好符号IEEE754标准Double类型
getchar();
}
我的疑问是f和ii在内存的二进制应该一样的才对啊
问题出在printf
int main()
{
int i=1;
float f=5;
printf("%d , %f ,%dn",i,f,i);
printf("%d , %d ,%d ,%dn",i,f,i,i);
printf("%d , %d ,%d ,%dn",i,(int)f,i,i);
printf("%d ,%d , %dn",i,i,f);
system("pause");
return 0;
}
显示如下:
1 ,5.000000 ,1
1 ,0 ,1075052544 ,1
1 ,5 ,1 ,1
1 ,1 ,0
为么第二个i显示不正常,
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。