[問題] C Primer Plus第6版關於錯誤格式輸出的解釋

看板C_and_CPP (C/C++)作者 (阿東)時間6年前 (2019/07/29 23:37), 6年前編輯推噓1(106)
留言7則, 2人參與, 6年前最新討論串1/1
各位版友好, 因為當年學C時基礎沒打好,買了工具書C Primer Plus重新溫習, 翻到Chapter 4 格式化輸出輸入的時候, 書本上舉了一個印出float資料的範例, 程式碼如下: #include <stdio.h> int main(void) { float n1=3.0; double n2=3.0; long n3=2000000000; long n4=1234567890; printf("%.1e %.1e %.1e %.1e\n",n1,n2,n3,n4); printf("%ld %ld\n",n3,n4); printf("%ld %1d %1d %1d\n",n1,n2,n3,n4); return 0; } 輸出如下: 3.0e+00 3.0e+00 3.1e+46 1.7e+266 2000000000 1234567890 0 1074266112 0 1074266112 書中使用圖片協助解釋為何最後一行輸出會是0 1074266112 0 1074266112, 圖片如下... https://i.imgur.com/loOdtmG.jpg
書中解釋如下... https://i.imgur.com/FF9vPov.jpg
以下有兩個問題想請教, 1.解釋中提到,n1以8個bytes放置到stack中,從float轉變成double型態, 請問為什麼會有這一步? 2.n3跟n4皆為long型態,大小為4個bytes,為何n3給了6個bytes的大小, 而n4又給4個bytes? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.176.224 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1564414643.A.BFD.html ※ 編輯: Dong0129 (36.227.176.224 臺灣), 07/29/2019 23:40:58 ※ 編輯: Dong0129 (36.227.176.224 臺灣), 07/29/2019 23:50:48

07/30 04:35, 6年前 , 1F
第2個問題 從原文哪邊可以看到n3有6個bytes的敘述?
07/30 04:35, 1F

07/30 04:38, 6年前 , 2F
另外code最後一個printf引數應該是ld不是1d
07/30 04:38, 2F

07/30 04:39, 6年前 , 3F
大概看懂第2個問題了 應該指的是他圖的部分吧?
07/30 04:39, 3F

07/30 04:39, 6年前 , 4F
圖中一小塊是4bytes 他箭頭是指向格子 所以剛好放在中
07/30 04:39, 4F

07/30 04:39, 6年前 , 5F
07/30 04:39, 5F

07/30 04:45, 6年前 , 6F
float是32bit cpu的浮點運算器沒這麼小的單位,就免費幫
07/30 04:45, 6F

07/30 04:45, 6年前 , 7F
你升級到double
07/30 04:45, 7F
文章代碼(AID): #1TFnAplz (C_and_CPP)
文章代碼(AID): #1TFnAplz (C_and_CPP)