5. 链接

练习5-1

假定一个程序在一个源文件中包含了声明:

  long foo;

而在另一个文件中包含了:

  extern short foo;

又进一步假定,如果给long类型的foo赋一个较小的值,例如37,那么short类型的foo就同时获得了一个值37.我们就能够对运行改程序的硬件做出什么样的推断?如果short类型的foo得到的值不是37而是0,我们又能够做出什么样的推断?

  在解答该问题之前,关于数据如何在内存中存储,我们引入两个概念。

    1. 大端模式(big endian):最低字节放在高位字节,可称高位优先,我们以unsigned int x = 0x12345678为例

      高地址
      ---------------
      buf[3] (0x78) -- 低位
      buf[2] (0x56)
      buf[1] (0x34)
      buf[0] (0x12) -- 高位
      ---------------
      低地址

    2. 小端模式(little endian):最低字节放在低位字节,可称低位优先,我们仍然以unsigned int x = 0x12345678为例

      高地址
      ---------------
      buf[3] (0x12) -- 高位
      buf[2] (0x34)
      buf[1] (0x56)
      buf[0] (0x78) -- 低位
      --------------

 

 现在我们就可以回答这个问题了,输出结果为37时,为小端模式,而输出结果为0是则为大端模式。

posted @ 2019-12-13 19:19  楓羽  阅读(128)  评论(0)    收藏  举报