关于%d %f的疑问,望大神指点,该怎么处理
关于%d %f的疑问,望大神指点
/* 练习4_5:编程,令该程序中故意包含下列错误:
* 用%d显示一个浮点数
* 用%f显示一个整数
* 用%d显示一个字符
*/
#include<stdio.h>
int main()
{
int i=1;
float f=1.0000;
char c='c';
printf("%d\n",f); //程序显示为0
printf("%f\n",i); //程序显示为0.000000
printf("%d\n",c); //程序显示为99(ASCII码)
return 0;
}
以上为我的c程序源码及结果(注释中),%d及%f的结果我很是费解,难道不是%d取整应该为1,而%f取浮点1.000000
------解决方案--------------------
那些格式符是不会帮你做转型的,直接用该类型的缺省值代替非该类型的数值。
------解决方案--------------------
你需要理解float与double在内存中的存放形式! 它们跟int是不一样的,搞清它们的存放形式之后再理解就很随意了!加油。青年!
------解决方案--------------------
上面的发错了
int
0000 0000
0000 0000
0000 0000
0000 0001
float 在内存中
0011 1111
1000 0000
0000 0000
0000 0000
------解决方案--------------------
/* 练习4_5:编程,令该程序中故意包含下列错误:
* 用%d显示一个浮点数
* 用%f显示一个整数
* 用%d显示一个字符
*/
#include<stdio.h>
int main()
{
int i=1;
float f=1.0000;
char c='c';
printf("%d\n",f); //程序显示为0
printf("%f\n",i); //程序显示为0.000000
printf("%d\n",c); //程序显示为99(ASCII码)
return 0;
}
以上为我的c程序源码及结果(注释中),%d及%f的结果我很是费解,难道不是%d取整应该为1,而%f取浮点1.000000
------解决方案--------------------
那些格式符是不会帮你做转型的,直接用该类型的缺省值代替非该类型的数值。
------解决方案--------------------
你需要理解float与double在内存中的存放形式! 它们跟int是不一样的,搞清它们的存放形式之后再理解就很随意了!加油。青年!
------解决方案--------------------
上面的发错了
int
0000 0000
0000 0000
0000 0000
0000 0001
float 在内存中
0011 1111
1000 0000
0000 0000
0000 0000
------解决方案--------------------
- C/C++ code
int i=1; float f=1.0000f; char c='c'; int *a = (int*)&f; float *b = (float*)i; printf("%d\n",*a); //程序显示为1065353216 printf("%f\n",b); //程序显示为0.000000 printf("%d\n",c); //程序显示为99(ASCII码)*/