大端模式和小端模式解析(包含面试题)
2013-08-05 13:57
323 查看
转载自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.
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.