a昊a 2019-06-13 18:17 采纳率: 66.7%
浏览 409
已采纳

C语言数据类型在程序中的使用?

先看一段代码

#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
的后四个字节,但是现在为什么能真确打印?求大神指教。

  • 写回答

2条回答 默认 最新

  • threenewbee 2019-06-13 19:19
    关注
    不是啊,你传入的是n1 n2 n3 n4,所以就是这四个变量,不存在因为第一个变量只读取了一半,第二个变量对应第一个变量后一半这种事情。
    你传入的又不是数组。
    
    如果是
    float a[4] = { xxx, xxx, xxx, xxx, xxx, xxx, ... };
    long * arr = (long *)&a[0];
    rintf("%ld %ld %ld %ld \n", arr[0], arr[1], arr[2], arr[3]);
    那才会出现你说的。
    
    另外,问题解决,请采纳。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?