2010-11-18 90 views
1

我期待到其他成员编写的代码和我遇到的代码来如下图所示:关于C结构成员

struct myType 
{ 
int myInt : 1; 
int reserved : 31; 
}; 

什么是1台31架以上,并在上面的符号使用?

回答

1

这些是位域。此代码意味着,myInt只是一个位和reserved是31位

例如,我的机器上

struct a 
{ 
    int asd : 1; 
    int b : 2; 
}; 

std::cout << sizeof(a); 

打印4(它的平台而定)。例如,结构的确切大小为32位,但实际大小可能不同 - 取决于对齐方式

+0

如果我们这样提到,那么int的大小,即4个字节没有考虑到? – Venkata 2010-11-18 14:49:29

+0

具体类型的大小被忽略。看我的编辑:) – 2010-11-18 14:52:19

4

这些是位域,冒号后的数字指定宽度,以位为单位,为该字段保留。它们通常用于节省空间,或试图映射具有位域的外部寄存器(如硬件拥有的寄存器)。请注意,打包和字节序会影响位在内存中的位置,所以如果可移植性很重要,则不会使用它们。

请注意,使用具有非常小的尺寸(如1)的带符号的位域是一个非常糟糕的主意。由于符号需要一位,所以实际值不会留下任何位,通常情况下这并不是很好的情况。使用unsigned int myUnsigned : 1修复此问题。