#ifndef XBITFIELD_H
#define XBITFIELD_H
class XBitField
{
public:
/** Default constructor */
XBitField(int bc);
/** Default destructor */
virtual ~XBitField();
// 指定bit位为1
int set (int bit);
// 返回bit位值
int get (int bit);
// 指定bit位为0
int reset (int bit);
protected:
private:
unsigned int *pField_; //!< Member variable "*pField_"
unsigned int uBitCount_; //!< Member variable "uBitCount_"
};
#endif // XBITFIELD_H
#include "XBitField.h"
#include <cstdio>
#include <windows.h>
#define SZ_UINT sizeof(unsigned int)
XBitField::XBitField(int bc)
{
//ctor
uBitCount_ = bc;
pField_ = new unsigned int[bc/(SZ_UINT*8)];
//memset(pField_, 0, bc);
printf("SZ_UINT: %d\nnumber: %d\n", SZ_UINT, bc/(SZ_UINT*8));
}
XBitField::~XBitField()
{
//dtor
if (pField_)
delete [] pField_;
}
int XBitField::set (int bit)
{
if (bit >= uBitCount_ || !pField_)
return -1;
pField_[bit/(SZ_UINT*8)] |= (0x00000001 << (bit%(SZ_UINT*8)-1));
return 0;
}
int XBitField::reset (int bit)
{
if (bit >= uBitCount_ || !pField_)
return -1;
pField_[bit/(SZ_UINT*8)] &= ~(0x00000001 << (bit%(SZ_UINT*8)-1));
return 0;
}
int XBitField::get (int bit)
{
if (bit >= uBitCount_ || !pField_)
return -1;
return (pField_[bit/(SZ_UINT*8)] & (0x00000001 << (bit%(SZ_UINT*8)-1)) ? 1 : 0);
}