1.2 用位逻辑运算实现位向量
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 设置位向量的第n位为1 */
void Set (char *bitVec, int n)
{
bitVec[n / 8] |= 1 << n % 8;
}
/* 读取位向量第n位的值 */
int Get (char *bitVec, int n)
{
if (bitVec[n / 8] & 1 << n % 8) {
return 1;
} else {
return 0;
}
}
void Init (char *bitVec)
{
Set(bitVec, 1);
Set(bitVec, 20);
Set(bitVec, 8);
Set(bitVec, 999);
Set(bitVec, 207);
}
int main ()
{
char bitVec[125];
memset(bitVec, 0, sizeof(char) * 125);
Init(bitVec);
for (int i = 0;i < 1000;i++) {
if (Get(bitVec, i)) {
printf("%d\n", i);
}
}
return 0;
}
1.8 可以用4bit来表示当前这个号码的状态,为何用4bit来表示呢,因为假设我们针对一个特定的号码来看,他的区号可能有八种情况:
1/8:800 877 888这三种区号都不存在。
3/8:800 877 888这三种区号中只有一种存在
3/8:800 877 888这三种区号中只有两种存在
1/8: 800 877 888这三种区号都存在
因此只要规定好bit位状态和需要表示的实际电话号码存在状态的关系就好了