#include <iostream>
using namespace std;
template <int N>
class my_bitset{
public:
typedef int ElemType;
static const int OFFSET = 5;
static const int REMINDER = 0x1F;
my_bitset(){
memset(m_data, 0, sizeof(m_data));
}
bool isOne(int i){
return m_data[i >> OFFSET] & (1 << (i&REMINDER));
}
bool isZero(int i){
return !isOne(i);
}
void setOne(int i){
m_data[i >> OFFSET] |= (1 << (i&REMINDER));
}
void setZero(int i){
m_data[i >> OFFSET] &= ~(1 << (i&REMINDER));
}
void setFullOne(){
memset(m_data, 0xFF, sizeof(m_data));
}
void setFullZero(){
memset(m_data, 0, sizeof(m_data));
}
bool getElement(int i){
return isOne(i); //m_data[i >> OFFSET] & (1 << (i&REMINDER));
}
private:
ElemType m_data[1 + N / (sizeof(ElemType) * 8)];
};
int main(){
my_bitset<10> s;
for (int i = 0; i < 10; ++i){
cout << s.isZero(i) << ends;
}
s.setOne(2);
for (int i = 0; i < 10; ++i){
cout << s.getElement(i) << ends;
}
return 0;
}
my_bitset
最新推荐文章于 2022-12-15 09:05:06 发布