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\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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM