c、c++中-int型以float或者float型以int输出问题

1、将浮点型以整形的类型输出问题

用VC6.0,会把以整形输出形式的浮点数输出为0;

 1 #include"stdio.h"
 2 int main()
 3 {
 4     float x=2.5,y=4.7,z;
 5     int a=7;
 6     z=x+a%3*(int)(x+y)%2/4;
 7     printf("%d
",z);
 8     printf("%d
",x);
 9     printf("%d
",x+a%3*(int)(x+y)%2/4);
10     printf("%f
",x+a%3*(int)(x+y)%2/4);
11     return 0;
12 }

但是要是X大一点的话就不会输出为0了

2、将整形以浮点型的类型输出问题

#include <stdio.h>
static void forcefloat(float *p)
{
     float f = *p;
     forcefloat(&f);
}

void main()
{
     int i=2;
     float j = 2.0;
     printf(" %f %f ",i,j);
}
------------------------------------
问题是这样的,为什么程序的输出结果是
0.0000000  2.0000000

我的猜测是因为int型是两个字节,所以2表示为0000000000000010,那么如果按照浮点数输出,则把这两个字节看作是浮点数的低字节,也就是尾数部分,所以结果是0.00000000
但是我尝试着将i的值变为65535,结果还是0.0000000,我想请高手替我解释一下,以能讲清楚基本原理并能上机通过为准,谢谢~~~~~~~

这个猜测是错误的,出现这样问题的原因是float型的每一位的意义与整形不同

int i=2;

4个字节就是 00000000 00000000 00000000 00000010
然后根据你的printf 格式,
float 解析:
高位0表示正数,
指数8位都是0, 那么就是 -127 次方, 然后...尾数已经不用考虑了 ~

-127 次方,
得到的结果基本是 0,
以float 6-7 位的精度,
显然得到的结果是 0 ...
(2 的-127 次方, 估计得接近40位小数才有非0值出现)

参考:https://blog.csdn.net/xxgxgx/article/details/46722143

https://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html

原文地址:https://www.cnblogs.com/zhj868/p/14240653.html