struct DESCRIPTOR
{ BYTE Type : 4; BYTE Reserved : 1;
};
{ BYTE Type : 4; BYTE Reserved : 1;
};
解决方案 »
- 谁有Visual C++经典游戏程序设计书或者电子书
- 求 CSDN上的 大量VC++通信开发实例,全部源码
- CTestFrame1继承CFrameWnd,CTestFrame1没文档,直接new CTestFrame1来创建。创建时,怎样分割视图?我尝试用CreateStatic分割,但出错。
- CRectTracker 光标问题---老问题了,希望高手解答!
- 新人求教一个大数据文件处理问题!各位大侠帮帮忙吧
- 请教各位高手,怎么用c++语言编写打印如下空心菱形图形的程序?
- vc下怎样整行移动字符
- VC中开平方根的函数是什么?
- 去哪里找一些好的Vc的实例呢
- 为什么我用vc在classview的类会突然消失呀?
- 界面调整问题:窗口大小调整后如何调整STATIC TEXT控件的位置
- 怎么处理连接超时???
一般这么定义都是内存按1byte对齐了,还真是节约啊!不过cpu就比较累了。
大哥,4位好不好?
min ( sizeof ( member ), n)
实际上,1字节边界对齐也就表示了结构成员之间没有空洞。
所谓位段类型,是一种特殊的结构类型,其所有成员均以二进制位为单位定义长度,并称成员为位段。
例如,CPU的状态寄存器,按位段类型定义如下:
struct status
{ unsigned sign: 1; /*符号标志*/
unsigned zero: 1; /*零标志*/
unsigned carry: 1; /*进位标志*/
unsigned parity: 1; /*奇偶/溢出标志*/
unsigned half_carry: 1; /*半进位标志*/
unsigned negative: 1; /*减标志*/
} flags;
显然,对CPU的状态寄存器而言,使用位段类型(仅需1个字节),比使用结构类型(需要6个字节)节省了5个字节。2.说明(1)因为位段类型是一种结构类型,所以位段类型和位段变量的定义,以及对位段(即位段类型中的成员)的引用,均与结构类型和结构变量一样。(2)对位段赋值时,要注意取置范围。一般地说,长度为n的位段,其取值范围是:0~(2n-1)。(3)使用长度为0的无名位段,可使其后续位段从下1个字节开始存储。例如,struct status { unsigned sign: 1; /*符号标志*/ unsigned zero: 1; /*零标志*/ unsigned carry: 1; /*进位标志*/ unsigned : 0; /*长度为0的无名位段*/ unsigned parity: 1; /*奇偶/溢出标志*/ unsigned half_carry: 1; /*半进位标志*/ unsigned negative: 1; /*减标志*/ } flags; 原本6个标志位是连续存储在1个字节中的。由于加入了1个长度为0的无名位段,所以其后的3个位段,从下1个字节开始存储,一共占用2个字节。(4)1个位段必须存储在1个存储单元(通常为1字节)中,不能跨2个。如果本单元不够容纳某位段,则从下1个单元开始存储该位段。(5)可以用%d、%x、%u和%o等格式字符,以整数形式输出位段。(6)在数值表达式中引用位段时,系统自动将位段转换为整型数