码迷,mamicode.com
首页 > 编程语言 > 详细

c语言:union,大小端

时间:2015-07-22 12:39:29      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

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

c语言:union,大小端

标签:

原文地址:http://www.cnblogs.com/mylinux/p/4666966.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!