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

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

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

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

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

textual
Листинг программы
//=================================================================================================
struct TKeyFlags
{
//-------------------------------------------------------------------------------------------------
 public   :
//-------------------------------------------------------------------------------------------------
  uint8_t                      Old    :1;
  uint8_t                             :6;
  uint8_t                      Current:1;
//-------------------------------------------------------------------------------------------------
  static TKeyFlags             LongTimeUp;
  static TKeyFlags             JustUp;
  static TKeyFlags             LongTimeDown;
  static TKeyFlags             JustDown;
//-------------------------------------------------------------------------------------------------
                               TKeyFlags                (                                  );
//-------------------------------------------------------------------------------------------------
                               TKeyFlags                (bool                   Current    ,
                                                         bool                   Old        );
//-------------------------------------------------------------------------------------------------
  bool                         operator ==              (TKeyFlags             &KeyFlags   );
//-------------------------------------------------------------------------------------------------
};
//=================================================================================================

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

В данном коде определен класс 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
Похожие ответы