2015-10-05 49 views
2

我目前在學習C和類型轉換,它建議如果我想將一個int轉換爲一個浮點數,我應該在變量前加上(float)來做到這一點。(浮點數)在C中的類型轉換

但是,當我不使用類型轉換時,答案仍然正確,即使我正在混合整數和浮點數。

有人可以解釋爲什麼/當我需要特別使用類型轉換(float)

#include <stdio.h> 

int main(void) { 
    int A, B, E; 
    float C, D; 

    A = 2; 
    B = 1; 
    C = 12.5; 

    D = C * A + B; 
    E = C * A + B; 

    printf("Total is %.1f\n", D); 
    printf("total is %d", E); 
    return 0; 
} 
+0

你的代碼沒問題。你的學習材料不是很好。除非沒有其他選擇,否則應該避免演員。 –

+0

M.M,我正在使用'絕對初學者指南C編程',有沒有比這更好的書?謝謝 – NZSteve

+0

[看這個主題](http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)一些建議 –

回答

2

你永遠需要明確強制轉換爲float除非你想以武力int S之間的精確的操作,例如

int a = 10; 
int b = 3; 

a/b得到int類型(因爲它是一個整數除法)的3,而a/(float)b產生類型float3.3333..。此外,C語言規範還確保您可以在必要時將整數類型隱式轉換爲浮點數(例如,使用另一個浮點數的操作)。此外,如果將float值分配給int變量,則會發生縮小,在這種情況下,值會被截斷。 (C11的第6.3.1.4節)

1

按照慣例,C將上溯造型的算術表達式成float如果表達式具有甚至一個float變量。所以,以下兩個表達式將結束是float

int A = 3; 
float F = 1.0; 
float result1 = A * F; // result is 3.0 
float result2 = A/F; // result is also 3.0 
float result3 = A - F; // result is 2.0 

在您的實際代碼,您有以下表現:

D = C * A + B; 

在操作順序而言,我們可以重寫右側像這樣:

((C * A) + B); 

C的溫度將如下評價的:

((float + int) + int) 
((float) + int) 
float 
+4

這個措辭不是很好,例如'float = int/int + float'仍然是整數除法 –