首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言 printf 類型不匹配:%f 對應 int 導致輸出 0.000000

     編輯:程式設計綜合問答

現象

int a = 5;
printf("%f", a);  // 輸出 0.000000

float b = a;
printf("%f", b);  // 輸出 5.000000

根因:二進制表示差異

類型佔用字節存儲格式5 的二進制
int (32位)4補碼00000000 00000000 00000000 00000101
float (IEEE 754)4符號位+指數+尾數0 10000001 01000000000000000000000

printf("%f") 按 float 格式讀取 4 字節,將 int 的補碼誤解為浮點數,導致極小值(約 7e-45),顯示為 0.000000。

變參函數默認提升規則

  • float 自動提升為 double (8 字節)。
  • int 保持 4 字節,不提升為 double。
  • 因此 %f 期望讀取 8 字節 (double),實際只取到 4 字節 int,高位殘留垃圾數據。

正確做法

int a = 5;
printf("%d", a);           // 整數用 %d
printf("%f", (double)a);   // 強轉 double
printf("%f", (float)a);    // 強轉 float (會提升為 double)

編譯器警告

啟用 -Wformat (GCC/Clang) 或 /W4 (MSVC) 會報警:format '%f' expects argument of type 'double', but argument has type 'int'。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved