前几天有网友提问了一个C语言printf()函数问题,测试后发现原来自己也无法解释。所以向各位网友求助。
问题是如何解释为何一下语句运行结果是0:
printf("%f", 4/3);
为何4/3没有发生Integer promotion?
即,得到的结果为何与
printf("%f",(double)(4/3));
不同?
å ¶å®å¨æ¤ä¹åæ就已ç»èèè¿å¯è½ä¸æ¯ç±Integer promotionå¼èµ·ï¼èæ¯printf()çå¤çé»è¾é æã
printf("%f\n", 100);
é®é¢æ¯è¿ç§å¤çæ¯Cè¯è¨æ åä¸çè¦æ±ï¼è¿æ¯Impliment definedï¼çè³æ¯undefinedï¼
è¿æprintf()ä¸çâ%fâ表示çæ¯doubleãèåªæscanf()ä¸çâ%fâ表示floatï¼â%lfâæ表示doubleã
ä½ è¯´çæ¯å¯¹çãæä»¥ä½ å¨çº ç»ä»ä¹å¢ï¼
追é®æçº ç»çæ¯printf()å½æ°ä¸çè¿ç§è¡¨ç°ï¼å°åºæ¯ISO Cä¸çæç¡®å®ä¹åï¼MinGWåVC++ 6çImpliment definedï¼è¿æ¯ISO Cä¸çæ空é´çundefinedï¼
追çstdioæ¬æ¥å°±ä¸æ¯Cæ åéé¢çä¸è¥¿ãè¿ä¸ªè¡¨ç°å¾æ£å¸¸åï¼floatçåæ³åintçåæ³å°±ç®å
¼å®¹ï¼ä¹è¯å®ä¸å®å
¨ä¸æ ·ï¼doubleé£å°±æ´ä¸ä¸æ ·äºï¼ä¸å¯¹åºçè¾åºæ ¼å¼è¯å®ä¸å·¥ä½åãè¿å¹¶æ²¡æä»ä¹å¥½çº ç»çï¼å°±æ¯è¿ä¹ç¨çï¼å«äººå®äºæ åå°±å
¥ä¹¡éä¿ãprintfè¿ç§ä¸è¥¿åªè½è¯´æ¯è°è¯åä»ä¹çæ¶å顺æåçï¼çæ£å软件ççè³ååºå±çæä¸ä¼å»ç®¡ä»ä¹æ ¼å¼ä¸æ ¼å¼ï¼è½¯ä»¶è¾åºæè¿ä¸ªä¸æ ·åç¨æ·è¯å®ä¸æ»¡æï¼åºå±ç´æ¥è°ç¨é©±å¨ï¼å
³printfæ¯äºã
printfä¹äºCå°±åç§å¦ä»ªå¨ä¹äºç§å¦ï¼åè
åªæ¯å©ç¨åè
çåçå¶é çä¸ä¸ªå·¥å
·ï¼ä»¥ä¾¿æ´è½æ¹ä¾¿å°ç 究åè
ï¼ä½åè
并ä¸æ¯åè
主è¦çç»æé¨åï¼æ²¡æåè
ï¼åè
åæ ·åå¨ï¼å¹¶ä¸å¯ä»¥ä»¥å
¶ä»çæ¹å¼è¢«åºç¨ãæ以ï¼çº ç»printf为ä»ä¹ä¼è¿æ ·å°±æ³å¨çº ç»ä¸ºä»ä¹ç¨çµå表ä¸è½æµçµæµï¼è½ç¶è¿ç§ç°è±¡èªæå®çåçï¼ä½å¹¶æ 太大æä¹ï¼ä¹å°±æ¯å°±ç®ç¥é为ä»ä¹ï¼ä¹ä¸è½ç»ä½ ä»ä¹æä»·å¼çå¯åï¼è¿ä¸å¦ç¨è¿ä¸ªæ¶é´å»å¤è¯»ä¸¤æ¬ä¹¦ãå·¥å
·è¯¥æä¹ç¨å°±æä¹ç¨ï¼åºè¯¥èµ¶å¿«ç¨å¥½å·¥å
·ï¼ç¶åå»ç 究æ´æ·±å±çä¸è¥¿ãæè§å¾è®¡ç®æºè¯è¨çæ£çå
涵å¨äºç®æ³ï¼æ¯ææ ·æè½ç®å¾åºãç®å¾å¿«ï¼èä¸æ¯ææ ·æè½æç»æ表示åºæ¥ã
å¦æ满æ请é纳ï¼å¦æé®é¢æ¬¢è¿ç»§ç»æ¢è®¨ã