zoukankan      html  css  js  c++  java
  • 第 1 章 第 2 题 位向量的数组实现问题 位运算实现

    问题分析

      位向量可以定义为一个模拟数组(整型数组)。所谓的“ 实现位向量 ”也就是定义函数,实现对模拟数组中指定【位】的设置,清空,以及测试。

    函数实现

     1 // 每个整数的位数
     2 #define BITSPERWORD 32
     3 // 每次位移量
     4 #define SHIFT 5
     5 // 取模掩码
     6 #define MASK 0x1F
     7 // 位向量的元素个数
     8 #define N 10000000
     9 
    10 // 模拟数组
    11 int a[1 + N/BITSPERWORD];
    12 
    13 /*
    14  * 函数功能:置位向量第i位为1
    15  * 函数说明:" i>>SHIFT "等于" i/32 " 获取到位向量目标位对应的模拟数组元素的位置
    16             " i & MASK "等于" i%32 " 获取到位向量目标位在对应的模拟数组元素中的位置
    17             " 1<<(i & MASK) " 表示一个除了要设置的那位其他位都是0的整数
    18 */
    19 void set (int i) {
    20     a[i>>SHIFT] |= (1<<(i & MASK));
    21 }
    22 
    23 /*
    24  * 函数功能:置位向量第i位为0
    25  * 函数说明:" i>>SHIFT "等于" i/32 " 获取到位向量目标位对应的模拟数组元素的位置
    26             " i & MASK "等于" i%32 " 获取到位向量目标位在对应的模拟数组元素中的位置
    27             " 1<<(i & MASK) " 表示一个除了要清空的那位其他位都是0的整数
    28 */
    29 void clr (int i) {
    30     a[i>>SHIFT] &= ~(1<<(i & MASK));
    31 }
    32 
    33 /*
    34  * 函数功能:获取位向量的第i位
    35  * 函数说明:" i>>SHIFT "等于" i/32 " 获取到位向量目标位对应的模拟数组元素的位置
    36             " i & MASK "等于" i%32 " 获取到位向量目标位在对应的模拟数组元素中的位置
    37             " 1<<(i & MASK) " 表示一个除了要获取的那位其他位都是0的整数
    38 */
    39 int tst (int i) {
    40     return a[i>>SHIFT] & (1<<(i & MASK));
    41 }

    小结

      1. 位操作与整数操作的关系对应是解答本题的关键

      2. 位向量用C++的bitset容器来实现更方便,但本题规定用位逻辑运算实现。

  • 相关阅读:
    python 软件目录规范
    生成器与迭代器
    第四周-第08章节-Python3.5-装饰器
    第三周-第18章节-Python3.5-函数式编程与函数不同
    第三周-第17章节-Python3.5-递归
    第三周-第16章节-Python3.5-局部变量与全局变量作用域
    第三周-第14章节-Python3.5-函数式编程
    JAVA发红包案例
    JAVA字符串
    JAVA关于字符串&&字符数组处理的小题目
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3237798.html
Copyright © 2011-2022 走看看