先看一段代码
#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 %ld %ld %ld \n",n1,n2,n3,n4);
return 0;
}
下面是运行结果
我知道的是%ld取4个字节double是8字节float在printf中转换为double
在第三行第一个%ld取得应该是n1的前4字节,第二个%ld取得是n1的后四个字节,以此类推,那这样的话第三行的输出结果应该不是0 0,且后两个值也不会被正确打印,而应该第三行的数据第一与第三个数为0第二与第四个数为n1与n2
的后四个字节,但是现在为什么能真确打印?求大神指教。