首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

printf()中说明符的转换有关问题

2012-04-01 
printf()中说明符的转换问题//CPrimerPlus的一个例题#includestdio.hintmain(){floatn13.0doublen23.

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调会有警告,但可以运行.你看看结果就明白了:)

热点排行