Чтение битового поля - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток! Есть обьявленое битовое поле (его размер как я понял всегда кратен 4 байтам). Записать данные в переменные этого битового поля не проблема. Но для понимания каким образом компилятор выделяет память, и есть ли промежутки в памяти между переменными битового поля, хотелось бы обратится по адресу переменной bfVar, и побитово прочесть значения которые хранятся в этой переменной! Код приведен ниже... Подскажите пожалуйста как это лучше всего сделать... P.S. Заранее приношу извинения за возможно корявую трактовку вопроса
Листинг программы
  1. struct BitField
  2. {
  3. unsigned int i2 : 2;
  4. unsigned int i4 : 4;
  5. };
  6. int _tmain(int argc, _TCHAR* argv[])
  7. {
  8. BitField bfVar;
  9. bfVar.i2 = 2;
  10. bfVar.i4 = 7;
  11. ...
  12. }

Решение задачи: «Чтение битового поля»

textual
Листинг программы
  1. //=================================================================================================
  2. struct TKeyFlags
  3. {
  4. //-------------------------------------------------------------------------------------------------
  5.  public   :
  6. //-------------------------------------------------------------------------------------------------
  7.   uint8_t                      Old    :1;
  8.   uint8_t                             :6;
  9.   uint8_t                      Current:1;
  10. //-------------------------------------------------------------------------------------------------
  11.   static TKeyFlags             LongTimeUp;
  12.   static TKeyFlags             JustUp;
  13.   static TKeyFlags             LongTimeDown;
  14.   static TKeyFlags             JustDown;
  15. //-------------------------------------------------------------------------------------------------
  16.                                TKeyFlags                (                                  );
  17. //-------------------------------------------------------------------------------------------------
  18.                                TKeyFlags                (bool                   Current    ,
  19.                                                          bool                   Old        );
  20. //-------------------------------------------------------------------------------------------------
  21.   bool                         operator ==              (TKeyFlags             &KeyFlags   );
  22. //-------------------------------------------------------------------------------------------------
  23. };
  24. //=================================================================================================

Объяснение кода листинга программы

В данном коде определен класс TKeyFlags, который содержит битовые поля Old и Current. Битовое поле Old имеет размер 8 бит, а битовое поле Current также имеет размер 8 бит. В классе также определены статические переменные LongTimeUp, JustUp, LongTimeDown и JustDown, которые являются экземплярами класса TKeyFlags. В конструкторе класса TKeyFlags определены два варианта инициализации: 1) TKeyFlags(bool Current, bool Old) - инициализация с использованием значений переменных Current и Old. 2) TKeyFlags() - инициализация без аргументов, при которой оба битовых поля сбрасываются в 0. Также в классе определен метод operator==, который проверяет на равенство два экземпляра класса TKeyFlags. Код не содержит функций для чтения и записи битового поля, так как это не является основной задачей данного кода.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы