[整理]C结构实现位段(bit field)
2024-10-21 06:32:31
#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
最新文章
- ATL 获取flash信息
- C#并行编程-线程同步原语
- 再一个客户端设置多个git账号
- 百度Web富文本编辑器ueditor在ASP.NET MVC3项目中的使用说明
- Strust的基础情况
- (10)nehe教程4--旋转
- asp.net 权限问题
- .net平台下C#socket通信(转)
- 图文:TF卡和SD卡的区别及什么是TF卡?什么是SD卡
- 我的 MarkDown 学习笔记
- C#项目间循环引用的解决办法,有图有真相
- C# 调用cmd.exe的方法
- Robot Framework学习笔记
- FNMP
- Android BrocastReceiver解析
- iframe相关小结
- 关于引用外部类要用static 的问题
- Kibana——日志可视化工具
- HeadFirst Ruby 第十五章总结 Saving and loading data
- spring学习 六 spring与mybatis整合
热门文章
- C++ 游戏之点点水果
- exFAT移动硬盘写保护怎么去掉
- sguf冲销脚本的实现
- vim出现自动补全的问题
- Python3.6 AES加密 pycrypto 更新为 pycryptodemo | TypeError: Object type <;class &#39;str&#39;>; cannot be passed to C code
- Java如何查看死锁
- CPU结合CS、IP寄存器进行执行程序
- Codechef_JULY14
- YARN结构分析与工作流程
- 对synchronized的一点理解