union And 位域(一代码分析)

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

#include <stdio.h>

void main()

{

union

{

struct

{

unsigned short s1:3;

unsigned short s2:3;

unsigned short s3:3;

}x;

char c;

}v;

v.c=100;

printf("%d\n",v.x.s3);

}

A:4 B:0 C:3 D:6

答案是A

----------------------------------------------------------------------------------------------------------------------------

v.c= 100 (01100100) -->low:0100 high:0110

union 后的存储分布是这样:

char c: 0 1 0 0 0 1 1 0

struct: x.s1 x.s2 x.s3

value : 010 001 10(0)

由于char 是8 位长度.x 是9位.union 显示x比c要多一位.s3的位域是3位的.所以后面被0 取出的结果为100,即十进制的4.

-------------------------------------------

位域

有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:

struct 位域结构名

{ 位域列表 };

其中位域列表的形式为: 类型说明符 位域名:位域长度

本文引用通告地址: http://blog.csdn.net/shrimpywu/services/trackbacks/471808.aspx

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航