union变量存储

字节序

小端字节序(Little Edian)指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。比如整形1在内存中的存放情况是:

而换成大端字节序(Big Edian)则是:

基于Intel X86的体系结构的PC机是小端字节序,我们可以写一个程序来验证。

#include<stdio.h>

main(){
	int num=1;
	int c=num>>24;
	printf("%d\n",c);
	c=num & 0xff;
	printf("%d\n",c);
}

输出0和1。

我们知道union中只存储一个成员变量,union的长度是其size最大的成员变量的长度。

#include<stdio.h>

union {
	int i;
	char x[2];
}a;

main(){
	a.x[0]=10;
	a.x[1]=1;
	printf("%d\n",a.i);
}

a是全局变量,它被初始化为0。a占4个字节的内存空间,并且a.x和a.i共用此空间。联合体a中数据存储情况是:

所以a.i=0x010A,即266。

posted @ 2012-10-07 11:32  高性能golang  阅读(2193)  评论(0编辑  收藏  举报