Struct – Объясните результат:

У меня есть следующий код.

struct values{ int a:3; int b:3; int c:2; }; void main(){ struct values v={2,-6,5}; printf("%d %d %d",va,vb,vc); } 

Когда я выполняю код, я получаю следующий вывод:

 2 2 1. 

Но выход должен быть 2 -6 5 , правильно?

Если я ошибаюсь, объясните.

    -6 превышает диапазон 3-битного подписанного int. Поэтому вы наблюдаете артефакт неопределенного поведения, определенного реализацией (на практике выбрасываются наиболее значимые бит вашего значения).

     {2, | -6, | 5 } 010 last 3 bits | 010 last 3 bits | 01 last 2 bits 2 2 1 

    Нет. Выход 2 2 1 .

    Компилятор C преобразует значения в двоичный файл и сохраняет в памяти.

    Двоичное значение 2: 00000010

    Двоичное значение -6: 11111010 (11111001 + 1)

    Двоичное значение 5: 00000101

    При хранении в памяти:

    Для 2 будет сохранено 010.

    Для -6, 010 будет сохранено.

    Для 5, 01 будет сохранено.

    Когда вы получите доступ к этим переменным из вашего основного метода, для va «010» будет возвращено, здесь оставлено большинство бит для знака.

    Таким образом, va равно 2. Аналогично, vb равно 2 и vc равно 1.

    Надеюсь, поможет.