user-0 提问: typedef struct有:号是什么总思？

回复:
user: user-1
content: 位域，编译器是看做两个结构体的！

user: user-2
content: 给你个范例参考，使用位段获取整数不同的位   #include <stdio.h>  union decompose{ 	int integer; 	struct{ 		unsigned int w0 : 16; 		unsigned int w1 : 16; 	}w16;  	struct{ 		unsigned int bt0 : 8; 		unsigned int bt1 : 8; 		unsigned int bt2 : 8; 		unsigned int bt3 : 8; 	}bt8;  	struct{ 		unsigned int hex0 : 4; 		unsigned int hex1 : 4; 		unsigned int hex2 : 4; 		unsigned int hex3 : 4; 		unsigned int hex4 : 4; 		unsigned int hex5 : 4; 		unsigned int hex6 : 4; 		unsigned int hex7 : 4; 	}hex4;  	struct{ 		unsigned int b0 : 1; 		unsigned int b1 : 1; 		unsigned int b2 : 1; 		unsigned int b3 : 1; 		unsigned int b4 : 1; 		unsigned int b5 : 1; 		unsigned int b6 : 1; 		unsigned int b7 : 1; 		unsigned int b8 : 1; 		unsigned int b9 : 1; 		unsigned int b10 : 1; 		unsigned int b11 : 1; 		unsigned int b12 : 1; 		unsigned int b13 : 1; 		unsigned int b14 : 1; 		unsigned int b15 : 1; 		unsigned int b16 : 1; 		unsigned int b17 : 1; 		unsigned int b18 : 1; 		unsigned int b19 : 1; 		unsigned int b20 : 1; 		unsigned int b21 : 1; 		unsigned int b22 : 1; 		unsigned int b23 : 1; 		unsigned int b24 : 1; 		unsigned int b25 : 1; 		unsigned int b26 : 1; 		unsigned int b27 : 1; 		unsigned int b28 : 1; 		unsigned int b29 : 1; 		unsigned int b30 : 1; 		unsigned int b31 : 1; 	}b32; }; /* 此宏定义不能用于循环，即n不能是变量，只能是数字  * 因此比较适用与零散获取位状态或者字节状态  */ #define GETWORD(x, n) (((union decompose){.integer = x}).w16.w##n)  #define GETBYTE(x, n) (((union decompose){.integer = x}).bt8.bt##n)  #define GETHEX(x, n) (((union decompose){.integer = x}).hex4.hex##n)  #define GETBIT(x, n) (((union decompose){.integer = x}).b32.b##n)   void test_getx() { 	int tmp = 0x0f0f0f0f; 	int i; 	printf("%X\n", GETBYTE(tmp, 0)); 	printf("%X\n", GETBYTE(tmp, 1)); 	printf("%X\n", GETBYTE(tmp, 2)); 	printf("%X\n", GETBYTE(tmp, 3));  	printf("%X", GETHEX(tmp, 0)); 	printf("%X", GETHEX(tmp, 1)); 	printf("%X", GETHEX(tmp, 2)); 	printf("%X", GETHEX(tmp, 3)); 	printf("%X", GETHEX(tmp, 4)); 	printf("%X", GETHEX(tmp, 5)); 	printf("%X", GETHEX(tmp, 6)); 	printf("%X\n", GETHEX(tmp, 7));  	printf("%d", GETBIT(tmp, 0)); 	printf("%d", GETBIT(tmp, 1)); 	printf("%d", GETBIT(tmp, 2)); 	printf("%d", GETBIT(tmp, 3)); 	printf("%d", GETBIT(tmp, 4)); 	printf("%d", GETBIT(tmp, 5)); 	printf("%d", GETBIT(tmp, 6)); 	printf("%d", GETBIT(tmp, 7)); 	printf("%d", GETBIT(tmp, 8)); 	printf("%d", GETBIT(tmp, 9)); }  int main() { 	test_getx();	 	return 0; }

user: user-3
content: 为了节省存储空间，并使处理简便，Ｃ语言又提供了一种数据结构，称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域，并说明每个区域的位数。每个域有一个域名，允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。

user: user-4
content: google 位域

user: user-5
content: 这个位域，楼主先百度下，然后再编程看看。。。理论+实践

user: user-6
content: 位域。 使用时应该注意字节对齐问题：http://kofsky.iteye.com/blog/211686

user: user-7
content: 位域，节约内存，更好的cache。

user: user-8
content: 位域 很精细，我就在设计的通信协议里面用过~~~

user: user-9
content: 参考http://blog.sina.com.cn/s/blog_3d8529400100istl.html  引用 楼主 aree 的回复:typedef struct {    unsigned COMPLETED      : 1;    unsigned A             : 1;    unsigned st_1          : 27; } TEST_O, *PTEST_O;  typedef struct {    unsigned COMPLETED      : 1;    unsigned st_2          : 28; } TEST_O, *PTEST_O;  请教一下，这个结构的的 : 号表示什么意思？与普通结构体定义不太一样，有:号的。 另外，上面这2个结构体是一样的吗？

user: user-0
content: 那上面这2个结构体是不样的吗？ 不能替换吧。

user: user-10
content: 位域 表示 这个变量占多少个位（一个字节8个位）

user: user-11
content: 位域

user: user-12
content: 说明定义的变量只占用该类型的1位，两个结构体的大小一样。