关于C结构成员

关于C结构成员,c,C,我正在研究其他成员编写的代码,我发现代码如下所示: struct myType { int myInt : 1; int reserved : 31; }; 当使用上述符号时,1和31代表什么?这些是位字段。此代码表示,myInt仅为一位,保留为31位 例如,在我的机器上 struct a { int asd : 1; int b : 2; }; std::cout << sizeof( a ); 结构a { 国际建筑标准协会:1; INTB:2;

我正在研究其他成员编写的代码,我发现代码如下所示:

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

当使用上述符号时,1和31代表什么?这些是位字段。此代码表示,
myInt
仅为一位,
保留
为31位

例如,在我的机器上

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

std::cout << sizeof( a );
结构a { 国际建筑标准协会:1; INTB:2; };
std::cout这些是位字段。此代码表示,
myInt
仅为一位,
保留
为31位

例如,在我的机器上

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

std::cout << sizeof( a );
结构a { 国际建筑标准协会:1; INTB:2; };
std::cout这些是位字段,冒号后面的数字指定了为该字段保留的宽度(以位为单位)。它们通常用于节省空间,或映射具有位字段的外部(如硬件所有)寄存器。请注意,打包和结尾会影响位在内存中的布局方式,因此如果可移植性很重要,就不能使用它们


请注意,使用大小非常小的有符号位字段(如1)是一个非常糟糕的主意。因为符号需要一个位,所以实际值没有留下位,这通常不是一个很好的情况。使用unsigned int myUnsigned:1解决了这个问题。

这些是位字段,冒号后面的数字指定了为该字段保留的宽度(以位为单位)。它们通常用于节省空间,或映射具有位字段的外部(如硬件所有)寄存器。请注意,打包和结尾会影响位在内存中的布局方式,因此如果可移植性很重要,就不能使用它们


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

如果我们这样提到,int的大小(即4字节)是否不在考虑范围内?如果我们这样提到,int的大小(即4字节)是否不在考虑范围内?