struct DESCRIPTOR
{  BYTE Type         : 4;  BYTE Reserved     : 1;
};

解决方案 »

  1.   

    BYTE Type:4 表示4个字节
      

  2.   

    本来占1BYTEd的只占4bits 和1bit,
    一般这么定义都是内存按1byte对齐了,还真是节约啊!不过cpu就比较累了。
      

  3.   

    BYTE Type:4 表示4个字节//////////////////
    大哥,4位好不好?
      

  4.   

    vc6中的编译选项有 /Zp[1|2|4|8|16] ,/Zp1表示以1字节边界对齐,相应的,/Zpn表示以n字节边界对齐。n字节边界对齐的意思是说,一个成员的地址必须安排在成员的尺寸的整数倍地址上或者是n的整数倍地址上,取它们中的最小值。也就是:
        min ( sizeof ( member ),  n)
        实际上,1字节边界对齐也就表示了结构成员之间没有空洞。
      

  5.   

    存储1个信息不必占用1个字节,只需二进制的1个(或多个)位就够用。如果仍然使用结构类型,则造成内存空间的浪费。为此,C语言引入了位段类型。        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)在数值表达式中引用位段时,系统自动将位段转换为整型数