这个litle程序如何工作?

Blo*_*aRd 5 c++ struct bit-fields

我试图检查关于C++的QA练习,一个问题让我抓狂!

typedef struct {
    unsigned int i : 1;
} myStruct;

int main()
{
    myStruct s;
    s.i = 1;
    s.i++;
    cout << s.i;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是什么是输出:0/1/2/3/-1 /段错误?

我确实检查了2这是一个错误的答案:D,那么为什么程序显示为0

小智 7

您需要熟悉位域.

默认情况下,int的大小为32位(4字节).但是使用给定的表示法,您可以指定变量使用的位数.

因此,当您将值从1递增时,它会溢出并返回到零.