我期待到其他成员编写的代码和我遇到的代码来如下图所示:关于C结构成员
struct myType
{
int myInt : 1;
int reserved : 31;
};
什么是1台31架以上,并在上面的符号使用?
我期待到其他成员编写的代码和我遇到的代码来如下图所示:关于C结构成员
struct myType
{
int myInt : 1;
int reserved : 31;
};
什么是1台31架以上,并在上面的符号使用?
这些是位域。此代码意味着,myInt
只是一个位和reserved
是31位
例如,我的机器上
struct a
{
int asd : 1;
int b : 2;
};
std::cout << sizeof(a);
打印4
(它的平台而定)。例如,结构的确切大小为32位,但实际大小可能不同 - 取决于对齐方式
这些是位域,冒号后的数字指定宽度,以位为单位,为该字段保留。它们通常用于节省空间,或试图映射具有位域的外部寄存器(如硬件拥有的寄存器)。请注意,打包和字节序会影响位在内存中的位置,所以如果可移植性很重要,则不会使用它们。
请注意,使用具有非常小的尺寸(如1)的带符号的位域是一个非常糟糕的主意。由于符号需要一位,所以实际值不会留下任何位,通常情况下这并不是很好的情况。使用unsigned int myUnsigned : 1
修复此问题。
如果我们这样提到,那么int的大小,即4个字节没有考虑到? – Venkata 2010-11-18 14:49:29
具体类型的大小被忽略。看我的编辑:) – 2010-11-18 14:52:19