春暖花开
雪化了,花开了,春天来了
posts - 149,comments - 125,trackbacks - 0
这是《程序员面试攻略》上的一道题,先前也有一位公司同事问过我,今天有重新拿起看了一下。

书中介绍了两种方法
第一种是这样的利用强制类型转换
bool endianness()
{
      int testNum;
     char*  ptr;

     testNum = 1;
     ptr = (char*)&testNum;
     return ptr;
}

这个方法还比较好理解。

第二种方法就是利用union。
bool endianness()
{
    union{
         int theInteger;
         char singleChar;
   }endianTesg;

   endianTest.theInteger = 1;
   return endianTest.singleChar;
}

这种方法很巧妙。带着困意就是没有看懂,一个个问号就蹦出来了?这是为什么呢?

说实话,union在学习和工作中用的还真的不是很多。其用法还真是不记得。
所以赶快到网上去搜了一下。有篇文章还不错,我看懂了。
共用体union用法讲解
链接地址:http://blog.ednchina.com/likee/20666/message.aspx

Union表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型和不同长度的变量。其长度为Union中最大的变量长度。

这样,我们就不难理解上面的程序,theInteger和singleChar是共用一个内存位置的,如果是小尾数法的话,那么singleChar为1,对应theInteger的低八位;如果是大尾数法的话,那么singleChar为0, 对应theInteger的低八位。


继续努力学习!
朝着梦想加油前进。
posted on 2009-07-28 15:04 Sandy 阅读(769) 评论(0)  编辑 收藏 引用 所属分类: c++学习

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理