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\n",z); 8 printf("%d\n",x); 9 printf("%d\n",x+a%3*(int)(x+y)%2/4); 10 printf("%f\n",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("\n\n%f %f\n",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