我正在查看其他成员编写的代码,我看到了下面显示的代码:
struct myType
{
int myInt : 1;
int reserved : 31;
};
上面的1和31是什么,当使用上面的符号时?
答案 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位,但实际大小可能不同 - 取决于对齐