這兩個等價嗎?將浮點數轉換爲int,有無轉換
float f = 3.14;
int i;
i = f; // 3
而且
float f = 3.14;
int i;
i = (int) f; // 3
這兩個等價嗎?將浮點數轉換爲int,有無轉換
float f = 3.14;
int i;
i = f; // 3
而且
float f = 3.14;
int i;
i = (int) f; // 3
編譯器處理這兩種情況的方式沒有區別。生成的機器碼將是相同的。但是,第一個是隱式轉換,第二個是顯式轉換。根據編譯器標誌,執行隱式轉換時可能會失去精度。
在附註上,文字3.14
的類型爲double
,這意味着在語句float f = 3.14
中也可能存在精度損失。一個乾淨的方法是編寫float f = 3.14f
,它指定這是 類型爲float
的值3.14。
它們是相同的。
在32位x86系統上使用GCC 4.8.2進行測試。
gcc -Wall -Wextra -Wpedantic
在編譯這段代碼時不會給出任何警告,但是它會用-Wconversion
。
它將與'-Wconversion' – MBlanc
@MBlanc是的,你是對的。答案已更新。 –
編譯器足夠智能,可以同時處理這兩種情況。但我更喜歡第二種方法,因爲在大型程序中閱讀起來更容易。另外建議在顯式轉換中指定您正在投射的類型。最後,您的第一種方法可能無法在C#中工作。
Ref:http://msdn.microsoft.com/en-us/library/ms173105.aspx
它們是相同的。你爲什麼要問? – rjv
都是一樣的......牛頓理論越來越複雜..:D –
3 == 3,不是嗎? :P –