float跟int的相互转化输出

float和int的相互转化输出
float x,y;
x=5;
y=3;
printf("x=%d y=%d\n",x,y);
return 0;

输出 0和1075052544

int main()
{
printf("%f",5);
printf("%d",5.01);
return 0;
}
输出 0和一个很大的数

哪位高手能够解释一下?不胜感激。



------解决方案--------------------
老问题了。

http://topic.csdn.net/u/20090305/22/6365501d-844e-4fd4-9905-ac1c703ba05a.html
------解决方案--------------------
用printf打印格式和类型不匹配的值,结果是不可预料的。
------解决方案--------------------
你要知道float在内存中是如何保存的,是按照IEEE规范的,所以当按照int输出时,系统会取前四个字节,这四个字节可能是float数的指数或者头或者尾的组合,这个值应该是这样的。但是如果你强制转换的话,就不一样了,系统会把float转int保存,这样估计你就能输出5了
------解决方案--------------------
首先解释float x=5;printf("x=%d",x);float型数据在计算机中以IEEE754标准存储第一位为符号位,接下来八位是指数位,后23位为有效数字位,具体规则参照IEEE754,5的机器表示为0 10000001 0100 0000 0000 0000 0000 000,之后还有一个规则,机器在存储浮点数的时候 会以双精度的形式存储,此时就涉及到将单精度转换为双精度的问题,二进制表示为0 10000000001 0100 0000 0000 0000(之后还有36个0),以%d输出时,取后32位,所以输出值为0,对5.01用此种办法转换,也讲得出期望值;
接下来,说一下printf("x=%d y=%d\n",x,y);此时y的输出值只于参数表中的有关,即实际上参数表中的y实际上没有传到函数里面,你可以试一下输出printf("x=%d y=%d\n",x);与刚才的输出相同。
辛苦打的,新人求分。
------解决方案--------------------
http://en.cppreference.com/w/cpp/io/c/fprintf

用正确的格式符 来输出!!!!!
------解决方案--------------------
用printf打印格式和类型不匹配的值 结果不可预料
------解决方案--------------------
探讨
用printf打印格式和类型不匹配的值 结果不可预料

------解决方案--------------------
探讨
引用:
用printf打印格式和类型不匹配的值 结果不可预料

结果预料起来很费劲而已。

------解决方案--------------------
Int, float, double 之间的相互转换:

Int :在.NET中,int是一个有符号32位整数 ,无论处理器是32位还是64位。它的.NET框架类型是System.Int32 。

Float:单精度浮点数,32位长度,1位实数符号位(原码表示),1位指数符号位,7位指数位(此八位为移码表示)以及23位数据位(补码表示),在.net中又称为Single。

Double: 64位长度的双精度浮点数,1位符号位,11位指数位,52位数据位。

三者的关系:int可以隐式转换成float和double;float只能强制转换成int,但是可以隐式转换成double;double只能强制转换成float和int。

------解决方案--------------------
float当按照int输出时,系统会取前四个字节
------解决方案--------------------
探讨

引用:
用printf打印格式和类型不匹配的值 结果不可预料

结果预料起来很费劲而已。