首页 > 代码库 > [整理]C结构实现位段(bit field)

[整理]C结构实现位段(bit field)

#include <stdio.h>#include <string.h>typedef struct A{	int a:5;	int b:3;	unsigned c:8;	unsigned d:8;} Type_A;/* VS2010, Windows XP, Debug模式下运行 */int main(void){   	struct A a;	char s[]="12345678";	printf( "%d\n",sizeof(Type_A) );//4	printf("%d\n",sizeof(a));//4	memcpy(&a,s,3);	printf("%d\n",a.a);//‘1‘的低位 -15	printf("%d\n",a.b);//‘1‘的高位 1	printf("%d\n",a.c-‘0‘);//‘3‘ 51	printf("%d\n",a.d-‘0‘);//‘4‘ 52	return 0;}

‘1‘(49)的二进制 00110001,
a.a=10001 (-15)
a.b=001     (1)

由A的定义已知a.a(10001)是代表一个有符号的int型,

先执行符号位扩展得到11110001,

再减一得到11110000,

再取反得到10001111,就是-15的源码了.
所以a.a的值为-15, 同理,a.b为1。

 

参考:

http://www.cnblogs.com/bigrabbit/archive/2012/09/20/2695543.html