C++: 模拟实现类bitset
标签: C++ bitset 位运算
by 小威威
1.bitset简介
bitset能实现对数字的位的操作,同时也能通过类似于数组的下标来访问各个位的数值,以执行相应的操作。模拟bitset就是用一个普通的数组来存储数据以达到模拟的目的。
先声明一下,本篇文章并不是讲述标准库中bitset这个类的用法,而是去讲述如何实现一个模拟bitset的类。
众所周知,int类型在64位系统中占4个字节,也就是32位,倘若我建立一个大小为5的数组,那么我就能存储5*32=160个位。然后我可以通过对数组的每个元素单独处理,通过位运算,来实现对位的操作。
2.类的实现
bitset.h如下:
#ifndef BITSET_H
#define BITSET_H
#include<iostream>
#define N 5
const int max_length = 32 * N;
class bitset {
private:
int a[N];
public:
bitset(); // 初始化全部置0
void set(int pos); // 将pos位变为1
void reset(int pos); // 将pos位变为0
int count() const; // 计算1的个数
bool test(int pos) const; // 检测位的数据是否为1
bool any() const; // 检测是否存在1
bool none() const; // 检测是否不存在1
bool all() const; // 检测是否全为1
bitset& operator&= (const bitset& b);
bitset& operator|= (const bitset& b);
bitset& operator^= (const bitset& b);
bitset& operator= (const bitset& b);
bitset& operator <<= (int pos);
bitset& operator >>= (int pos);
bitset operator~() const;
bitset operator&(const bitset& b) const;
bitset operator|(const bitset& b) const;
bitset operator^(const bitset& b) const;
bitset operator<<(int pos) const;
bitset operator>>(int pos) const;
bool operator== (const bitset& b) const;
bool operator!= (const bitset& b) const;
bool operator[] (int pos) const; // 下标访问
friend std::ostream& operator << (std::ostream& os, const bitset& s) {
for (int i = N-1; i >= 0; i--) {
for (int j = 31; j >= 0; j--) {
if (s.a[i] & (1 << j)) os << 1;
else os << 0;
}
}
return os;
}
};