# A BitVector class

• 09-12-2003
supaben34
A BitVector class
Hello there all,
I am enrolled in a Data Structures class and we are studying the structure called bitvector. It's a really interesting course... one that actually makes use of C++ other than doing some simple "Hello World" type programs assigned to us in the introductory course of C++.
Anyway, my question to you all is this. For those of you that do know, a bitvector can be manipulated in the bit level. I understand how to access at the bit level. You access the kth bit by:
1) Performing integer division by 8
2) Performing a "mask" at the kth bit
This is done in code like so:
Code:

```  void BitVector::Set(unsigned int index)     // make bit = 1   {     // Access the bit k, by integer dividing index by 8     // and shifting index % 8     unsigned byte = Array[index/8];     unsigned bit = Test(index);   }```
where Test is:
Code:

```  int BitVector::Test(unsigned int index) const     // tests whether a bit is turned 'on' or 'off'   {     return (Array[ByteNumber(index)] & Mask(index)) != 0;   }```
My question is now that you have accessed it, how do you manipulate at the bit level?? An explanation over code is much more appreciated. Thank you for your time.
• 09-13-2003
Sebastiani
First consider how an integer is set, cleared, and tested:

Code:

``` bool test(unsigned data, char bit) {  return data & (1 << bit); } void set(unsigned * data, char bit) {  *data |= (1 << bit); } void clear(unsigned * data, char bit) {  *data &= ~(1 << bit); }```
So for an integer, the valid indexes would be 0-31. A bit vector just lets you do it 'more intuitively' plus allows you to have say a 236 bit piece of data (I'm assuming here - never used a 'bitvector' myself). Either way, the bitvector class simply maps the index you specify into the internal bit of interest. Manipulating the bit would be done through a member function of course.