实现设置和清零一个数的某一位:
#include <iostream>
using namespace std;
#define JudgeBit(BitPos) (0x00000001<<BitPos)
template<typename T>
class CBitVector32
{
public:
CBitVector32(){ }
CBitVector32(T nData):m_nData(nData){ }
~CBitVector32(){ }
//打印m_nData数据
void Display();
//将m_nData的第nIndex为设为1
void TurnOn(unsigned int nIndex);
//将m_nData的第nIndex为设为0
void TurnOff(unsigned int nIndex);
//判断m_nData的第nIndex位是否为1,是返回true,反之返回false
bool IsTurnOn(unsigned int nIndex);
private:
T m_nData;
};
template<typename T>
bool CBitVector32<T>::IsTurnOn(unsigned int nIndex)
{
if(sizeof(T) * 8 < nIndex)
{
return false;
}
return (m_nData>>nIndex) & 0x00000001;
}
template<typename T>
void CBitVector32<T>::TurnOn(unsigned int nIndex)
{
if( !IsTurnOn( nIndex ))
{
m_nData |= JudgeBit(nIndex);
}
}
template<typename T>
void CBitVector32<T>::TurnOff(unsigned int nIndex)
{
if( IsTurnOn( nIndex ))
{
m_nData &= (~JudgeBit(nIndex));
}
}
template<typename T>
void CBitVector32<T>::Display()
{
cout<<m_nData<<endl;
}
void main()
{
CBitVector32<int> dl(32);
cout<<dl.IsTurnOn(4);
cout<<endl;
dl.TurnOff(5);
dl.Display();
}