作者Dong0129 (阿东)
看板C_and_CPP
标题[问题] C Primer Plus第6版关於错误格式输出的解释
时间Mon Jul 29 23:37:21 2019
各位版友好,
因为当年学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://webptt.com/cn.aspx?n=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
1F:→ john2007: 第2个问题 从原文哪边可以看到n3有6个bytes的叙述? 07/30 04:35
2F:→ john2007: 另外code最後一个printf引数应该是ld不是1d 07/30 04:38
3F:→ john2007: 大概看懂第2个问题了 应该指的是他图的部分吧? 07/30 04:39
4F:→ john2007: 图中一小块是4bytes 他箭头是指向格子 所以刚好放在中 07/30 04:39
5F:→ john2007: 间 07/30 04:39
6F:推 wei115: float是32bit cpu的浮点运算器没这麽小的单位,就免费帮 07/30 04:45
7F:→ wei115: 你升级到double 07/30 04:45