2015-08-29 96 views
-6

隱式類型轉換如何在下面的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); 

} 
+2

WELLCOM爲SO。你不明白哪種轉換?你是否付出了努力來回答這個問題?這是從哪裏來的,你只是把作業傾倒給我們? –

+0

我做了我的研究先生,我發現當1.an整型變量分配給float或double數據類型時,它會得到提升,並且2.當float或double數據類型分配給int或char時,值將被截斷。我無法分析情景混合表達。謝謝 –

+0

在我無法回答的AMCAT考試中提出了類似於這個問題。 –

回答

1

1/2是整數由導致一個整數值即一個整數分,0(0.5是截斷)

1.0/2是整數由雙值除以。所以2(整數值)被提升爲雙精度型,然後除法運算得到雙精度值。所以結果值是0.5。

1.0/2.0導致雙倍除以兩倍,結果僅爲0.5倍。

最後所有這些被添加到1.0是雙重類型。然後將它轉換爲float類型,因爲f是一個浮點類型變量。

而且印刷用%d符結果的雙類型值在未定義的行爲。見本post

+0

謝謝你的解釋 –

+0

不客氣。自由喲接受我的答案,如果它幫助你。 –