[英]Arithmetic expression as printf arg
我不明白為什么
float x = (4+2%-8);
printf("%f\n", x);
打印600萬
printf("%f\n", (4+2%-8));
打印0.000000。 任何信息都會有所幫助。 問候。
表達式(4 + 2 % -8)
產生一個整數,並且您嘗試打印浮點數(它們不匹配)。
在第一種情況下,整數將轉換為float
(由於賦值),因此稍后在printf
可以使用,因為該值采用%f
期望的格式。
嘗試這個:
printf("%f\n", (4.0 + 2 % -8));
^
這是因為這里:
float x = (4+2%-8);
(4+2%-8)
的類型為int
但是由於x
的類型而被轉換為float
。 但是,這里:
printf("%f\n", (4+2%-8));
沒有執行任何強制類型轉換,因此您將傳遞一個int
,該int
期望一個float
值給您一個垃圾值。 您可以使用簡單的演員表修復此問題:
printf("%f\n", (float)(4+2%-8));
在第一個代碼段中,由於賦值,結果int
值隱式轉換為float
,在第二個代碼段中,您對編譯器撒謊:您告訴它期望使用double
類型的值,但“發送”一個int
類型的值。
不要騙編譯器。 它將報仇。
請注意, printf
轉換說明符"%f"
期望使用double
類型的值,但“發送” float
是可以的,因為在調用函數之前,該值會自動轉換為double
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.