Đây là cách giải bài này của bạn mình :
Code:
#include "iostream"
#include "conio.h"
using namespace std;
class BitArray{
protected:
char *arr;
int size, // kick thuoc 1 dvi dlieu trong arr.
n, // so bit dang luu.
pos, // vi tri trong arr dang xet.
index, // vi tri bit dang xet trong arr[pos].
tmp, // place holder.
iErr; // error code.
public:
int& operator[](int i){
if(tmp) arr[pos] |= (1<<index);
else arr[pos] &= (~(1<<index));
if((i>=0) && (i<n)){
pos = i/size;
index = i%size;
tmp = (arr[pos] >> index) & 1;
return tmp;
}
clog << "Wrong index! (i=" << i << ", n=" << n << ")\n";
return iErr;
}
BitArray(int num){
iErr = -1;
size = 8*sizeof(char);
n = num;
pos = index = tmp = 0;
int upperBound = n / size + (int)((n%size)?1:0);
arr = new char[upperBound];
for(int i=0;i<upperBound;arr[i++]=0);
}
~BitArray(){
delete[] arr;
}
};
void main(){
BitArray a(10);
for(int i =0; i<10; cout << a[i++] << " ");
cout << endl;
a[5] = 1;
a[9] = -3; // hay cai ji cung dc, khac 0 thi la 1.
cout << a[9] << endl;
cout << a[3] << endl;
cout << a[10] << endl; // error!!!
for(int i =0; i<10; cout << a[i++] << " ");
_getch();
}
Bookmarks