2 / 1 / 1
Регистрация: 24.05.2017
Сообщений: 51
1

Размер структуры с битовыми полями

15.12.2019, 14:42. Показов 1755. Ответов 4

Здравствуйте, имеется структура с битовыми полями (используя директиву #pragma pack (push,1)):
C++
1
2
3
4
5
6
7
8
struct A
{
uint8_t b : 7;
uint8_t c : 3;
uint8_t d : 3;
uint8_t e : 3;
}
#pragma pack (pop)
И имеется union содержащий ее и массив uint8_t[4].
Почему размер данной структуры равен 3 байтам, а не 2-м? Разве элементы не будут располагаться как в приложении?
Миниатюры
Размер структуры с битовыми полями  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2019, 14:42
Ответы с готовыми решениями:

Чтение с файла структуры с битовыми полями
Есть структура: struct Comp { string name; int body:1; int typeVC:1; int typeSC:1; int...

Структура с битовыми полями
Написать программу, которая реализует сохранение в структуре с битовыми полями времени (часы,...

Работа с битовыми полями
Добрый день. Не зная и не понимая подобного... Подскажите пожалуйста, как реализовать ввод...

Структура Военкомат с битовыми полями
Разработайте структуру, используя битовые поля для обозначения логических (битовых) значений....

4
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
15.12.2019, 15:47 2
C++
1
2
3
4
5
6
7
struct A
{
uint8_t b : 7;
uint8_t c : 2;
uint8_t d : 3;
uint8_t e : 3;
}
А эта структура будет весит 2 байта)
Магия компилятора))
0
"C with Classes"
1590 / 1369 / 512
Регистрация: 16.08.2014
Сообщений: 5,697
Записей в блоге: 1
15.12.2019, 15:58 3
Цитата Сообщение от javaeb Посмотреть сообщение
Почему размер данной структуры равен 3 байтам, а не 2-м?
потому что данные не выровнены и поля будут упакованы по максимуму:
C++
1
2
3
4
5
6
7
8
9
struct A
{
    uint8_t b : 7; // первый байт
    uint8_t c : 3; // второй байт
    uint8_t d : 3; // второй байт
                        //  осталось 2 бита
    uint8_t e : 3; // третий байт
                        // осталось 5 бит
};
для чтения c и d будут проделаны дополнительные манипуляции.
0
2 / 1 / 1
Регистрация: 24.05.2017
Сообщений: 51
15.12.2019, 16:26  [ТС] 4
Цитата Сообщение от _stanislav Посмотреть сообщение
потому что данные не выровнены и поля будут упакованы по максимуму:
C++
1
2
3
4
5
6
7
8
9
struct A
{
    uint8_t b : 7; // первый байт
    uint8_t c : 3; // второй байт
    uint8_t d : 3; // второй байт
                        //  осталось 2 бита
    uint8_t e : 3; // третий байт
                        // осталось 5 бит
};
для чтения c и d будут проделаны дополнительные манипуляции.
Подключенный #pragma pack(push,1) не работает?
0
фрилансер
4325 / 3781 / 830
Регистрация: 11.10.2019
Сообщений: 10,127
15.12.2019, 17:38 5
Лучший ответ Сообщение было отмечено javaeb как решение

Решение

вот так будет 2 байта
C++
1
2
3
4
5
6
7
8
9
#pragma pack (push,1)
struct A
{
uint16_t b : 7;
uint16_t c : 3;
uint16_t d : 3;
uint16_t e : 3;
}
#pragma pack (pop)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2019, 17:38
Помогаю со студенческими работами здесь

Разработать перечень основных операций с битовыми полями
Доброго времени суток! Пишу программу по следующему заданию: Разработать ПО работы с битами....

Определите четность числа по анализу старшего бита, используя объединение с битовыми полями
Используя объединение с битовыми полями, определите четность беззнакового целого числа по анализу...

Создание структуры с описывающими полями
Создать массив объектов созданной структуры, в который занести данные о сотрудниках. При отладке...

Использование структуры с двумя полями и одной функцией
Напишите программу, в которой используется структура с двумя полями и одной функцией. Одно поле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru