C++ビットドメイン

2454 ワード

          ,             ,              。           ,  0 1     ,         。        ,      ,C            ,  “  ” “  ”。  “  ”                      ,           。        ,             。                            。

             
    
       ,    :

struct      

{      };

          :          :    

  :

struct bs

{int a:8;int b:2;int c:6;};
       
            。          ,                 。  :

struct bs

{int a:8;int b:2;int c:6;}data;

  data bs  ,  2   。    a 8 ,  b 2 ,  c 6 。
         
               :

1.     0                     type  ,  type       。  :

struct bs {

unsigned a:4;

unsigned :0 ;/*  */

char b:4 ;/*         */

unsigned c:4;

}data;

VC6(     ,        )       。

   ,0x0012ff74   data     ,  a  0x0012ff74    ,  b 0x0012ff78  ,  0x0012ff78    。        a   4      。

   VC6              , unsigned。    。

   ,        a                。

       ,

a,    char ,     1  ;

a  unsigned,   unsigned; a  char,   unsigned; a  unsigned,   char;     ,     4  。

2.                  ,   int         32,bool         8。

3.         ,              。           。  :

struct k

{int a:1int :2 /* 2     */int b:3int c:2};

         ,              ,              。

          

     
               ,      :      ·               。

int main(void)

{

struct bs

{

unsigned a: 1;

unsigned b: 3;

unsigned c: 4;

}bit, *pbit;

bit.a = 1;

bit.b = 7;

bit.c = 15;

printf("%d,%d,%d
", bit.a, bit.b, bit.c); pbit = &bit; pbit->a = 0; pbit->b &= 3; pbit->c |= 1; printf("%d,%d,%d
", pbit->a, pbit->b, pbit->c); return 0; } bs, a,b,c。 bs bit bs pbit。 。 9、10、11 。( ) 12 。 13 bit pbit。 14 a , 0。 15 "&=", : pbit->b=pbit->b&3 b 7, 3 3(111&011=011, 3)。 , 16 "|=", : pbit->c=pbit->c|1 15。 17 。 , , 3 , 2 , 8 。 struct {char a : 3;char b : 3;char c : 2;} ; ,8 。 。 (bit-field), VC : 1) , sizeof , , ; 2) , sizeof , , ; 3) , ,VC6 ( ),Dev-C++ GCC ; (padding), 。