1、首先定义一个结构体,保存处理最大位数以及动态申请对应内存大小的空间。我们以最小的1个字节(unsigned char)来存储空间。
2、初始化结构体时,我们传入保存最大位数数值作为参数。因为计算机中都是二进制,所以传入位数对应的字斤谯噌最大值为2的n+1幂次方减1。需要对传入参数进行内部转化为实际字节数,1个字节包含8个比特位,所以对于不足8位的我们也需要申请1个字节。
3、初始化结构体时,我们将所有比特位都初始化设置为0。如何判断某个比特位是否已设置为1?首先需要计算对应比特位到底在哪里?因为我们申请的是8个比特组成的字节。所以需要计算实际位置。
4、 如何计算输入的位数对应字节数组中哪里?假设输入为P,那么首先对应数组中为P/8,然后字节中具体的位数为P%8。2. 使用或运算(|),只有1 | 1 的情况下才会等于1。所以我们使用或运算判断某个比特位设置为1。3. 使用与运算(&),1或0 & 0 == 0, 1或0 & 1 == 原数据。所以使用与运算清空某个比特位。我们看一下清空某个比特位的执行方法如下:
5、我们提供了设置和清除方法,最后提供一个方法,判断某个位是否已被设置。
6、最后我们写个验证程序,校验程序运行正常。同时,因为结构体使用堆栈内存,我们并且提供了释放结构体函数。