位段操作问题
来源:互联网 发布:最小公倍数 算法 编辑:程序博客网 时间:2024/05/16 17:43
struct A
{
unsigned char a:4;
unsigned char b:2;
unsigned char c:2;
};
char ch = 0x45;//0100,0101
struct A *aa = (struct A*)&ch;
《C程序设计》-谭浩强 P306 图12.6所示原理,struct A 的内存分布如下:
0100 | 01 | 01//位序:7~0
a | b | c
那么
aa->a = 4;
aa->b = 1;
aa->c = 1;
实际上,这是个错误的结果(xp+vc6.0),
aa->a = 5;
aa->b = 0;
aa->c = 1;
这是为什么呢?主要是书上图12.6不够清晰,没有标明位(bit)序,容易造成误解,我们知道,结构体中
a,b,c的排列顺序是:a--b--c,位序从低到高,那么,实际上,a,b,c在内存中的位置应该是:
01 | 00 | 0101//位序:7~0
c | b | a
如果非要转成如书中图12.6那样,那么:
1010 | 00 | 10//位序:0~7
a | b | c
这样虽然可以,但是不符合我们常规的阅读习惯,而且取值的时候还可以出错,因为字节的位序倒过来了,取值的时候也要倒过来看,
得不偿失,还不如:
01 | 00 | 0101//位序:7~0
c | b | a
这样清晰明了。取值也不会出错。
- 位段操作问题
- 位段操作
- 位段操作
- STM32的位段操作
- STM32的位段操作
- C/C++位操作简介 位段
- C语言位段问题
- C语言——位段操作
- STM32的位段操作基础
- 位操作的问题
- cortex-m3 位段(位带)问题
- 位段
- 位段
- 位段
- 位段
- 位段
- 位段
- 位段
- ASP.NET之母版页和内容页之间的传值
- 思科第二期答案网址
- 生活
- 转:用层模拟可移动的小窗口
- VS2005某个文件不能下断点——提示文件版本不一致
- 位段操作问题
- Use python for C++ unit/function test
- 消除C# Form的屏闪
- a中嵌套div的问题
- List采用delegate快速实现排序、查找等操作
- 数据对齐
- TOS/DSCP对照表
- UML类图符号说明
- 什么是SAAS