首页 > 代码库 > [整理]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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。