CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

请教高手一个linux下的数据存储方式问题

楼主john_tsu()2006-11-04 18:40:48 在 Linux/Unix社区 / 程序开发区 提问

我正复习准备考验,前段时间做了做专业课试题的样题,又一道题真的是把我给郁闷透了。这个题是这样的:  
   
  1.Data   representation,Byte   ordering,Alignment  
   
     
   
  Consider   the   following   program:  
   
  struct   s   {  
   
          char   c;  
   
          double   d;  
   
          float   f;  
   
          short   s;  
   
  };  
   
  union   u   {  
   
          unsigned   char   buf[24];  
   
          struct   s   a;  
   
          int   i;  
   
  }   u1;  
   
  int   main()  
   
  {  
   
          int   i,j;  
   
          memset(&u1.a,   0,   sizeof(struct   s));  
   
          u1.a.c   =   0xac;  
   
          u1.a.d   =   -3.3;  
   
          u1.a.f   =   0x1;  
   
          u1.a.s   =   0xbcde;  
   
          u1.i   =   0x12345678;  
   
    /*   print   out   the   bytes   of   u1.buf   as   2   digit   hexidecimal   numbers   with   a   line   break   after   every   8   bytes   */  
   
          for(i   =   0;   i   <   3;   i++)    
          {  
   
                  for(j   =   0;   j   <   8;   j++)  
   
                  printf("0x\%.2x   ",u1.buf[i*8+j]);  
   
          printf("\n");  
   
          }  
   
  }  
   
     
   
  This   program   is   compiled   and   run   on   a   Linux/x86   machine.   Fill   in   the   output   below.   Write   “??”   if   the   value   cannot   be   determined   from   the   information   provided.    
   
     
   
  0x____   0x____   0x____   0x____   0x____   0x____   0x____   0x____  
   
  0x____   0x____   0x____   0x____   0x____   0x____   0x____   0x____  
   
  0x____   0x____   0x____   0x____   0x____   0x____   0x____   0x____  
   
     
   
  Answer:  
   
  0x78   0x56   0x34   0x12   0x66   0x66   0x66   0x66  
   
  0x66   0x66   0x0a   0xc0   0x00   0x00   0x80   0x3f  
   
  0xde   0xbc   0x00   0x00   0x00   0x00   0x00   0x00  
   
   
  这个是复旦大学软件学院的《计算机系统基础》这门课的样题中的第一题,这个题害得我在图书馆查了一星期的资料,但最终还是没能搞定,实在没辙了。  
   
  我不明白的地方就是试题的答案。union   u1   中的int型变量i实在a之后定义的,为什么会被先打印出来?而且其他的变量打印出来的顺序好像都没有按照程序中定义的顺序,这到底是怎么回事啊?望高手赐教,不胜感激。 问题点数:20、回复次数:1Top

1 楼sourceid()回复于 2006-11-05 20:34:26 得分 0

没有写入u1.i   =   0x12345678之前,其中u1.a.c,   u1.a.s是四字节对齐.(编译器做)  
   
  0xac   0x00   0x00   0x00    
  0x66   0x66   0x66   0x66   0x66   0x66   0x0a   0xc0    
  0x00   0x00   0x80   0x3f  
  0xde   0xbc   0x00   0x00    
  0x00   0x00   0x00   0x00  
   
  写入后,  
   
  0x78   0x56   0x34   0x12    
  0x66   0x66   0x66   0x66   0x66   0x66   0x0a   0xc0  
  0x00   0x00   0x80   0x3f  
  0xde   0xbc   0x00   0x00    
  0x00   0x00   0x00   0x00  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:john_tsu

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo