小小笔试题(一)
从最简单的开始。
笔试题如下:
1.2012年9月15日,中兴面试:
小端系统
union{ int i; unsigned char ch[2]; }Student; int main() { Student student; student.i=0x1420; printf("%d %d",student.ch[0],student.ch[1]); return 0; }
输出结果为?(答案:32 20)
2.相关内容
(1)union类型
从内存的角度来说,Union就是一个类,只不过,它所包含的所以的数据成员都在同一个地址上。
因此Union对象的大小就是它所包含的数据类型中最大的那个。
(2)大端与小端模式
如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示。为简单起见,本书使用OP0表示一个32位数据的最高字节MSB(Most Significant Byte),使用OP3表示一个32位数据最低字节LSB(Least Significant Byte)。
地址偏移 |
大端模式 |
小端模式 |
0x00 |
12(OP0) |
78(OP3) |
0x01 |
34(OP1) |
56(OP2) |
0x02 |
56(OP2) |
34(OP1) |
0x03 |
78(OP3) |
12(OP0) |
如果将一个16位的整数0x1234存放到一个短整型变量(short)中。这个短整型变量在内存中的存储在大小端模式由下表所示。
地址偏移 |
大端模式 |
小端模式 |
0x00 |
12(OP0) |
34(OP1) |
0x01 |
34(OP1) |
12(OP0) |
由上表所知,采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,大端方式将高位存放在低地址,小端方式将高位存放在高地址。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。到目前为止,采用大端或者小端进行数据存放,其孰优孰劣也没有定论。
3 .参考
(1)下边这篇文章对与大端与小端讲的很详细,特别从几个角度对端模式进行解析。
http://www.52rd.com/Blog/Detail_RD.Blog_imjacob_14837.html