大端模式和小端模式解析(包含面试题)

转载自http://blog.csdn.net/ce123_zhouwei/article/details/6971544

Big-Endian和Little-Endian的定义如下:
1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:

1)大端模式:

低地址 -----------------> 高地址
0x12  |  0x34  |  0x56  |  0x78

2)小端模式:

低地址 ------------------> 高地址
0x78  |  0x56  |  0x34  |  0x12

可见,大端模式和字符串的存储模式类似。

 

腾讯2013关于大小端的面试题:http://www.cnblogs.com/yinble/archive/2013/04/15/3022345.html

1.

int main()
{
  long long a=1;
  long long b=2;
  long long c=3;
  printf("%d,%d,%d",a,b ,c);
  return 0;
}

输出结果是什么?(32位环境,cpu为小端模式,所有参数用栈传递)

无论在32/64环境中long long都是8个字节,参数从右到左进栈,栈中从栈底到栈顶依次为c、b、a,%d将打印栈中的4个字节,又因为是小端模式,所以打印结果为1 0 2

2.

unsigned int a= 0x1234;
unsigned char b=*(unsigned char *)&a;
在32位大端模式处理器上变量b= ?

大端存储,从低地址到高地址存储的为0x34、0x12,b指针指向a的第一个字节即0x34,0x34转换为ascii为0,所以输出结果为0.

 

你可能感兴趣的:(大端模式和小端模式解析(包含面试题))