[問題] C Primer Plus第6版關於錯誤格式輸出的解釋
各位版友好,
因為當年學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
07/30 04:35, 1F
→
07/30 04:38,
6年前
, 2F
07/30 04:38, 2F
→
07/30 04:39,
6年前
, 3F
07/30 04:39, 3F
→
07/30 04:39,
6年前
, 4F
07/30 04:39, 4F
→
07/30 04:39,
6年前
, 5F
07/30 04:39, 5F
推
07/30 04:45,
6年前
, 6F
07/30 04:45, 6F
→
07/30 04:45,
6年前
, 7F
07/30 04:45, 7F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章