[问题] C Primer Plus第6版关于错误格式输出的解释

楼主: Dong0129 (阿东跟上面讲的情况一样b)   2019-07-29 23:37:21
各位版友好,
因为当年学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?
作者: john2007 (john)   2019-07-30 04:35:00
第2个问题 从原文哪边可以看到n3有6个bytes的叙述?另外code最后一个printf引数应该是ld不是1d大概看懂第2个问题了 应该指的是他图的部分吧?图中一小块是4bytes 他箭头是指向格子 所以刚好放在中间
作者: wei115 (ㄎㄎ)   2019-07-30 04:45:00
float是32bit cpu的浮点运算器没这么小的单位,就免费帮你升级到double

Links booklink

Contact Us: admin [ a t ] ucptt.com