printf()中说明符的转换问题
//C Primer Plus的一个例题
#include <stdio.h>
int main()
{
float n1 = 3.0;
double n2 = 3.0;
long n3 = 2000000000;
long n4 = 1234567890;
printf( "%ld %ld %ld %ld ", n1, n2, n3, n4);
return 0;
}
运行后结果为:
0 1074266112 0 1074266112
书中说第2个%ld取n1的后半部分,我看不明白怎么会得到1074266112,请指点。
[解决办法]
double n2=3.0,n2在内存中的低四字节的比特串,按long型翻译出来就是1074266112.
[解决办法]
不同数据类型间的转换要考虑会有数据溢出
[解决办法]
float是8个字节,long 是4个字节.所以printf后面的n1,n2,n3,n4一共是8*2+4*2.
但输出只输出了4*4个字节.也就是只输出了n1,n2.并且由于类型的原因,把n1,n2分成4个字节显示了.就象cmail() 所说一样.
你可以试试printf( "%ld %ld %ld %ld %ld %ld ", n1, n2, n3, n4);
用vc调会有警告,但可以运行.你看看结果就明白了:)