Примечание ниже заявление внутри структура:
INT bit1: 1; -> 'int' указывает , что это SIGNED integer. Для целых целых чисел крайний левый бит будет приниматься за знак +/-. Если вы сохраняете 1 в 1-битовом поле: Самый левый бит равен 1, поэтому система будет обрабатывать значение как отрицательное число.
Метод дополнений 2 - это , используемый системой для обработки отрицательных значений .
Следовательно, сохраненные данные: 1. . 2-й дополнение 1 также является 1 (отрицательный).
Поэтому -1 печатается.
Если вы храните 2 в 4-битное поле: Binary 2: 0010 (самый левый бит равен 0, так система будет относиться к нему, как положительное значение) 0010 составляет 2 Поэтому 2 печатается.
Кажется, домашнее задание. – spidey
Реализация определяется, являются ли битовые поля 'int'' signed int' или 'unsigned int'. На некоторых компиляторах вы можете получить '1 2 2' в качестве вывода. Для переносимости вы должны использовать 'unsigned int' или' signed int' для бит-полей. Или не используйте битовые поля. – ouah