C中的位段(位域)的使用
来源:互联网 发布:林建华 北大 知乎 编辑:程序博客网 时间:2024/04/29 12:52
C中的位段的使用
/* DATE : 2010.6.24 关于C中的位端igned或者int*/#include <stdio.h>typedef struct _A{ unsigned a:4;//位段成员的类型仅能够为unsigned或者int unsigned b:4; unsigned c:2; unsigned d:6; unsigned E:1; unsigned D:2; unsigned T:3; unsigned A:9; unsigned h:4; //前面已经为31,故4+31>32已超过一个存储单元,所以4在一个新的存储单元存放 unsigned y:29;//由于前面的4在一个新的存储单元的开头存放,且29+4>32, 故在另一个新的存储单元存放}A; //所以最后求出的A的大小是4 + 4 + 4 =12/*对上面的具体解释: 一个位段必须存储在同一个存储单元中,不能跨两个单元.如果某存储单元空间中不能容纳 下一个位段,则改空间不用,而从下一个存储单元起存放该位段. 结构体A中的h和y就是这种情况. 在gcc环境下,测试后,一个存储单元为4个字节.*/typedef struct _S{ unsigned a:4; unsigned b:4; unsigned c:22; unsigned q:1; unsigned h:1; //unsigned i:33; // 错误:‘i’ 的宽度超过它自身的类型 //unsigned i:1;当多出此行时,该结构体大小由4变为8,因为此行之前正好为32位} S;typedef struct _T{ //当没有占满一个存储单元时,结构体的大小对齐为一个存储单元的大小 unsigned a:2; unsigned b:2; unsigned j:1; unsigned : 1;//可以定义无名位段,此例中该无名位段占用1位的空间,该空间将不被使用} T;typedef struct _V{ unsigned a:1; unsigned b:4; unsigned :0; //定义长度为0的位段时不能指定名字,否则编译不过 unsigned d:1; //定义了0字段后,紧接着的下一个成员从下一个存储单元开始存放;}V; //此例子中,d前面那个存储单元中的余下的27位中被0填充了int main(){ A a; S s; T t; V v; printf("sizeof(a)=%d\n", sizeof(a)); printf("sizeof(s)=%u\nsizeof(t)=%u\n", sizeof(s), sizeof(t)); printf("sizeof(v)=%d\n", sizeof(v)); return 0;}
- C中的位段(位域)的使用
- C中的位段的使用
- C中的位段的使用
- C中的位段的使用
- C语言中的位段(转)
- 聊聊C语言中的位段(位域)
- C语言当中位段的使用
- c语言当中位段的使用
- c语言当中位段的使用
- C语言当中位段的使用
- C语言中的位段
- C语言结构体中位域(位段)的使用
- 位域(位段)
- 位域(位段)
- 位域(位段)
- C语言中的位域的使用
- C语言中的位域的使用
- C语言中的位域的使用
- 总结: linux下的多线程API (POSIX线程)(转)
- 使用Sqlserver事务发布实现数据同步
- C++实例 自建基本mfc生成消息窗口和消息响应
- Android的JSON解析
- @@ManagedProperty注解
- C中的位段(位域)的使用
- 网站通用样式css代码
- 这个是以前以前写的一个通过生产消费模式反应线程同步的一个案例
- Oracle 11g(11.2.0) 手工建立数据库
- VMWare easy 模式安装Ubuntu 12.04时,停在installing vmware tools,please wait界面,解决方法
- SAP ERP业务优化之基于收货的发票验证
- NFC越来越近!关于NFC近场通讯的那些事儿
- JS实现进度条效果
- 今天开始博客写代码~