关于C struct成员

时间:2010-11-18 14:46:37

标签: c

我正在查看其他成员编写的代码,我看到了下面显示的代码:

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

上面的1和31是什么,当使用上面的符号时?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

这些是位字段。此代码表示myInt只是一位而reserved是31位

例如,在我的机器上

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

std::cout << sizeof( a );

打印4(取决于平台)。在你的例子中,结构的确切大小是32位,但实际大小可能不同 - 取决于对齐