在程序中经常使用标志位,特别在工控软件这一块,我用的比较多,于是结合网上的一些资料,做了一个标志类
上代码:
#pragma once
#include <qbytearray.h>
#include <iostream>
#include <QDebug>
#define Byte unsigned char
class FlagManager
{
static Byte Value[5]; // //BYTE 8 位 * 5 = 40
public:
static void Clear()
{
for (int i = 0; i < 5; ++i)
Value[i] = 0;
}
static void SetValue(Byte pArray[], Byte Size)
{
//将数据设置到里面去
for (int i = 0; i < Size && i < 5; ++i)
{
Value[i] = pArray[i];
}
}
static void SetBitStates(Byte BitIndex, bool States)
{
Byte ArrayIndex = static_cast<Byte>(BitIndex / 8);
Byte ChangeIndex = static_cast<Byte>(BitIndex % 8);
Byte BitValue = static_cast<Byte>(1 << ChangeIndex);
if (States)
{
Value[ArrayIndex] |= BitValue;
}
else
{
Value[ArrayIndex] ^= BitValue;
Value[ArrayIndex] ^= BitValue;**//这个地方按位异或执行两次,否则会GetBitStates方法获取的结果一直是true**
}
}
static bool GetBitStates(Byte BitIndex)
{
Byte ArrayIndex = static_cast<Byte>(BitIndex / 8);
Byte ChangeIndex = static_cast<Byte>(BitIndex % 8);
return ((Value[ArrayIndex] & (1 << ChangeIndex)) == (1 << ChangeIndex));
}
static void Print()
{
for (size_t i = 0; i < 40; i++)
{
qDebug() << GetBitStates(i);
}
}
};
位异或执行两次有没有更好的方法
欢迎大家讨论