Оператор : используется для битовых полей, то есть целых значений, которые использовать указанное количество битов большего пространства. Они могут быть объединены в машинные слова для экономии места, но фактическое поведение определяется реализацией.
Теперь вопрос «каким должен быть вывод оператора sizeof» прост, но ответ сложен.
Оператор sizeof говорит, что возвращает количество байтов, но определение " байты» не обязательно то, что вы думаете. Байт должен быть не менее 8 бит, но может быть и больше. 9, 12 и 16 бит не являются чем-то необычным.
sizeof(int) для данной платформы может варьироваться в зависимости от размера слова архитектуры. Предполагая размер байта 8 бит, sizeof(int) может быть 2, 4 или 8. Возможно, больше. При размере байта 16 sizeof(int) на самом деле может быть 1.
Теперь, помните, я сказал, что упаковка битовых полей зависит от реализации? Ну, это будет иметь большое значение здесь. Каждое битовое поле может быть помещено в отдельное слово. Или все они могут быть упакованы в один.
Скорее всего, вы используете платформу Intel с 8-битными байтами и 32- или 64-битными ints, и компилятор, вероятно, упакует битовые поля. Поэтому ваш sizeof(bit1), скорее всего, будет 4 или 8.
person
Fred Larson
schedule
05.06.2020
:используется для определения битового поля вstruct(илиunion). - person Fiddling Bits   schedule 05.06.2020