分类: C/C++
2015-12-10 23:52:20
原文地址:union是怎么判断处理器大小端 作者:
#include
int checkCPU()
{ union w
{
int a;
char b;
}c;
c.a = 1;
return (c.b == 1);
}
void main()
{
printf("%d\n", checkCPU());
}
如果输出结果是1,就是小端的,如果是0,就是大端的。
C语言为共用体c分配了4个字节的内存空间,可以想象成4个格子,变量a占4个,变量b只占低地址的一个。
c.a = 1;赋值后,
如果是小端,则最低位地址的那个格子存放1,其它3个格子都存放0。(1即十六进制0001)
如果是大端,则最高位地址的那个格子存放1,其它3个格子都存放0。
补充一下大端模式和小端模式的定义:
大端模式:字数据的高字节存储在低地址中,字数据的低字节存储在高地址中。
小端模式:字数据的高字节存储在高地址中,字数据的低字节存储在低地址中。