c语言:union,大小端

union:

不允许只用联合变量名作赋值或其它操作。

也不允许对联合变量作初始化赋值,赋值只能在程序中进行。

 

小端存储:

以字节为单位,低存低,高存高。

 

任何数据在内存中都是以二进制(1或着0)顺序存储的,每一个1或着0被称为1位,而在x86CPU上一个字节是8位。比如一个16位(2字节)的 short int型变量的值是1156,那么它的二进制表达就是:00000100 10000100。由于Intel CPU的架构是Little Endian(小端存储,请参数机算机原理相关知识),所以它是按字节倒序存储的,那么就因该是这样:10000100 00000100,这就是定点数1156在内存中的结构。

 

linux代码中的用例:union判断大小端[1]

#include <stdio.h>

static union { char c[4]; unsigned long l; } endian_test = { { 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.l)

void f1(void)
{
    printf("ENDIAN: %c\n" , ENDIANNESS);
}


int main()
{
    f1();
}
/*
root@oucaijun:/work/dcc# gcc *.c; ./a.out
ENDIAN: l
*/

  

引用:

1. http://21cnbao.blog.51cto.com/109393/120108

posted @ 2015-07-22 12:00  oucaijun  阅读(824)  评论(0编辑  收藏  举报
下载TeamViewer完整版 下载TeamViewer