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