使用位逻辑运算实现位向量

我们实现的功能是,给定一个整型(32位)数组,我们输入一个参数i,然后设置数组的i位是1,或是对第i位清零,或是探测第i位的值。这就涉及如何使用位逻辑(与、或、移位)运算来实现位运算?

下面用C++写了一个位运算的类:

主要方法在于set,clr,test。

其中set是将对应的位置值0或1。总体相当于一个二维数组,列可以通过i >> shift 取得,这个其实就是把i除以32,也就是2^5。目的是找出i应该数组中的哪个行位置;行是一个32位的Bit,需要将对应的位置0或1,需要1<<(i & mask) i & mask首先算出应该向左移动的位数,然后把1向左移动这么多位,剩下的就是和数组中的那个元素或者与运算,或者或运算了。

clr是将对应的位清零,test是判断对应的位置的数是否在集合中存在的。

其实把这几句改成这样更好理解些。

位向量在某些特定的海量数据处理应用中(像查找,排序之类),有很好的性能及内存优势。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值