2015-10-11 62 views

回答

6

double分配給int時不需要強制轉換。小數部分僅被截斷。如果您需要警告,您可以使用-Wconversion-Wfloat-conversion

+0

我認爲截斷會導致錯誤。這就是爲什麼我認爲你需要一個鑄造操作員。 – user3223190

+0

對不起,我還沒弄明白。我知道在java中,如果我們正在轉換,並且信息丟失,我們需要一個鑄造操作符。那麼C中的新編譯器是否接受它而不會引發警告信息? – user3223190

+1

C和Java是不同的語言。不要比較它們。 C是一種鬆散類型的語言。在C中,不需要強制轉換。它不僅僅是這種新C編譯器。他們都是。並且*有一種方法可以在需要時啓用警告。如果您使用GCC,只需使用'-Wconversion'或'Wfloat-conversion'。 –

0

爲了補充對方的回答,關於隱式轉換語義的技術說明可在http://en.cppreference.com/w/c/language/conversion找到:

任何真正的浮動型的有限值可以被隱式轉換爲任何整數類型。除了上述布爾轉換覆蓋的地方外,規則如下:
- 小數部分被丟棄(截斷爲零)。
。如果結果值可以用目標類型表示,則使用該值
。否則,行爲是不明確的

+1

您的引用很有幫助,但這是一個C問題,請不要將OP與此C++網站的鏈接混淆。這個網站充滿了不精確性和錯誤。例如在您鏈接到的vey頁面上:*'2u - 10; //帶符號/無符號,相同等級 // 10轉換爲無符號,無符號數學模爲INT_MAX //結果爲4294967288類型爲無符號整型(aka INT_MAX-7)'* – chqrlie

+1

準確地說,該網站是關於C++ * *和** C.我鏈接到一個專門關於C.的頁面,足以指出不精確性和錯誤。該網站雖然是一個wiki,所以我相信你可以爲它做出貢獻並修復這些錯誤來改善它。我根本沒有隸屬於它,但我仍然認爲它是一個有用的信息來源。 – SirDarius

+1

點好了。我可以投入一些時間來嘗試修復我在這個網站上遇到的錯誤,但它是非常令人難以置信的,我不會用一個10英尺的杆子碰觸C++頁面。 – chqrlie