使用位逻辑运算来实现位向量
2010-04-02 11:39
141 查看
使用位逻辑运算来实现位向量 使用位逻辑运算来实现位向量,指的是实现位向量的设置、清零、探测三个操作。 代码如下: private const int bitsPerWord = 32; private const int shift = 5; private const int mask = 0x1F; private const int n = 10000000; private static readonly int[] a = new int[1 + n / bitSperWord]; void set(int i) { a[i >> shift] |= (1 << (i & mask)); } void clr(int i) { a[i >> shift] &= ~(1 << (i & mask)); } int test(int i) { return a[i >> shift] & (1 << (i & mask)); } 我们实现的功能是,给定一个整型(32位)数组,我们输入一个参数i,然后设置数组的i位是1,或是对第i位清零,或是探测第i位的值。 这段代码中使用了太量的位逻辑运算,并不是很好看懂。 i >> shift 这个其实就是把i除以32,也就是2^5。目的是找出i应该数组中的哪个位置。 1<<(i & mask) i & mask首先算出应该向左移动的位数,然后把1向左移动这么多位,剩下的就是和数组中的那个元素或者与运算,或者或运算了。 其实把这几句改成这样更好理解些。 void set(int i) { a[i / 32] |= (1 << (i % 32)); } void clr(int i) { a[i / 32] &= ~(1 << (i % 32)); } int test(int i) { return a[i / 32] & (1 << (i % 32)); } 位向量在某些特定的海量数据处理应用中(像查找,排序之类),有很好的性能及内存优势。
相关文章推荐
- 使用位逻辑运算实现位向量并实现位图排序
- 使用位逻辑运算实现位向量
- 如何使用位逻辑运算来实现位向量
- 如何使用为逻辑运算实现位向量(PROGRAMMING PEARLS)
- [C++]使用位逻辑运算来实现位向量的理解
- 如何使用位逻辑运算来实现位向量的理解
- 使用位逻辑运算实现位向量
- 使用位逻辑运算实现位向量
- 使用位逻辑运算来实现位向量
- 使用位逻辑运算实现位向量(位图)
- 使用位逻辑运算来实现位向量
- <<编程珠玑>>笔记之使用位逻辑运算来实现位向量
- 使用位逻辑运算实现位向量
- 编程珠玑之1.2位逻辑运算实现位向量
- 使用位逻辑运算实现位向量
- 逻辑运算实现位向量
- 编程珠玑位逻辑运算实现位向量
- 编程珠玑:通过位逻辑运算实现位向量
- 使用位逻辑运算实现位向量,并实现大数据排序
- 算法--两种方法实现一个Add函数,让两个整数相加,但是不能使用+、-、*、/等四则运算符。