XBitField 一个01标志类

#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);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值