编程珠玑1.2/1.8

2020-01-04  本文已影响0人  孤烛

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位状态和需要表示的实际电话号码存在状态的关系就好了

上一篇 下一篇

猜你喜欢

热点阅读