zoukankan      html  css  js  c++  java
  • 1.6.2如何使用位逻辑运算(例如与、或、位移)来实现位向量?

    /*如何使用位逻辑运算(例如与、或、位移)来实现位向量?
    指的是实现位向量的设置、清零、探测三个操作。
    问题理解:
    错误:用一个int表示一位
    应该是操作bit,但是长度可能不一定是8或者32的倍数,因此使用连续的多个bit存储,但是还是要操作bit
    错误:使用%作为选定位置
    不能使用%,k除以32,可以使用右移的方式
    求模?k mod 32 ?
    2012.1.6
    */

    #include <stdio.h>
    #include <memory.h>

    #define MAXA 1000
    #define LENG_INT 32
    #define SHIFT 5   //求除结果,除以32
    #define MASK 0x1f  //求模,模32

    int bitVector[1 + MAXA / LENG_INT];

    int isLegial(int k)
    {
        if(k <0 || k> MAXA)
            return 0;
        return 1;
    }

    void initA()
    {
        memset(bitVector, 0, sizeof(bitVector)/LENG_INT);
    }

    void set(int k)
    {
        bitVector[k>>SHIFT] |= 1<<(k&MASK);
    }
    void clear(int k)
    {
        bitVector[k>>SHIFT] &= ~(1<<(k&MASK));
    }
    int test(int k)
    {
        return bitVector[k>>SHIFT] & (1<<(k&MASK));
    }
    void show()
    {
        int i;
        for(i = 0; i < (1 + MAXA / LENG_INT); ++i)
        {
            printf("%d", bitVector[i]);
        }
        printf("\n");
    }
    int main()
    {
        initA();
        show();   
        set(2);
        show();
        printf("test result: %d\n", test(2));

        clear(2);
        show();
        printf("test result: %d\n", test(2));
        return 0;
    }

  • 相关阅读:
    Chrome快捷键
    Nginx之基本介绍(一)
    windows程序调试
    python有序字典
    value是列表的字典排序
    构造Map并对其排序
    python读取文件时遇到非法字符的处理 UnicodeDecodeError: 'gbk' codec can't decode bytes in position
    python正则表达式 分割字符串
    python3 导入模块
    python3 以utf-8编码写文件
  • 原文地址:https://www.cnblogs.com/growup/p/2315195.html
Copyright © 2011-2022 走看看