隱式類型轉換如何在下面的c代碼片段中發生?輸出是什麼?C中的隱式轉換
#include<stdio.h>
void main()
{
float f = (1/2)+(1.0/2)+(1.0/2.0);
double d = 1/2;
printf("%f \n %d",f,d);
}
隱式類型轉換如何在下面的c代碼片段中發生?輸出是什麼?C中的隱式轉換
#include<stdio.h>
void main()
{
float f = (1/2)+(1.0/2)+(1.0/2.0);
double d = 1/2;
printf("%f \n %d",f,d);
}
1/2是整數由導致一個整數值即一個整數分,0(0.5是截斷)
1.0/2是整數由雙值除以。所以2(整數值)被提升爲雙精度型,然後除法運算得到雙精度值。所以結果值是0.5。
1.0/2.0導致雙倍除以兩倍,結果僅爲0.5倍。
最後所有這些被添加到1.0是雙重類型。然後將它轉換爲float類型,因爲f是一個浮點類型變量。
而且印刷用%d符結果的雙類型值在未定義的行爲。見本post
謝謝你的解釋 –
不客氣。自由喲接受我的答案,如果它幫助你。 –
WELLCOM爲SO。你不明白哪種轉換?你是否付出了努力來回答這個問題?這是從哪裏來的,你只是把作業傾倒給我們? –
我做了我的研究先生,我發現當1.an整型變量分配給float或double數據類型時,它會得到提升,並且2.當float或double數據類型分配給int或char時,值將被截斷。我無法分析情景混合表達。謝謝 –
在我無法回答的AMCAT考試中提出了類似於這個問題。 –