簡體   English   中英

算術表達式為printf arg

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM