• 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;
    }

  • 相关阅读:
    SETI ACdream
    字符串野指针 百练2681
    mvc架构的简单登录系统,jsp
    servlet修改后无效,仍然还是修改之前的效果
    mysql安装,数据库连接
    the process android.process.acore has stopped或the process com.phone。。。。
    软件测试
    vim实用技巧
    ubuntu终端白屏的解决方法
    vim相关资料
  • 原文地址:https://www.cnblogs.com/growup/p/2315195.html
Copyright © 2020-2023  润新知