Чтение битового поля - C (СИ)
Формулировка задачи:
struct BitField
{
unsigned int i2 : 2;
unsigned int i4 : 4;
};
int _tmain(int argc, _TCHAR* argv[])
{
BitField bfVar;
bfVar.i2 = 2;
bfVar.i4 = 7;
...
}Решение задачи: «Чтение битового поля»
//=================================================================================================
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.
Код не содержит функций для чтения и записи битового поля, так как это не является основной задачей данного кода.