码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-07-16 16:47:14      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   html   div   re   

#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

[整理]C结构实现位段(bit field),布布扣,bubuko.com

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

标签:blog   http   io   html   div   re   

原文地址:http://www.cnblogs.com/Benoly/p/3848643.html

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