Как работает эта маленькая программа? - PullRequest
0 голосов
/ 13 июня 2018

Я пытался проверить упражнения QA по поводу C ++, и один вопрос привел меня в бешенство !!

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

int main()
{
    myStruct s;
    s.i = 1;
    s.i++;
    cout << s.i;
    return 0;
}

В вопросе говорилось, что такое выход: 0/1/2/3 / -1 / Ошибка сегмента?

Я проверил 2 , что является неправильным ответом: D, так почему программа показывает 0 ?

1 Ответ

0 голосов
/ 13 июня 2018

Вам необходимо ознакомиться с битовыми полями .

По умолчанию int имеет размер 32 бита (4 байта).Но, используя заданную запись, вы можете указать, сколько битов используется для переменной.

Поэтому, когда вы увеличиваете значение с 1, оно переполняется и возвращается к нулю.

...