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), 。