位向量的操作

    有一个数组char c[100],我们知道该数组包含了100*8=800个bit,现在要求将第i个bit置位或清零,该如何实现呢?在解决这个问题之前,先介绍两个基本概念。
    1.位逻辑运算包括与,或,非三种运算。
    2.位向量就是由一些二进制位组成的向量。位向量可以用很少的内存来存储布尔变量,在海量数据处理中,具有很好的空间优势和时间优势。

    要置位第i个位,必须要求对其余位没有影响。首先考虑较简单的情况,例如将一个char类型的字符c的第i位置位。我们很容易想到 c |= (0x01<<i),清零c的第i位,只需要c &= ~(0x01<<i)。
    将问题扩展开来,例如有一个数组char c[100],我们知道该数组包含了100*8=800个bit,现在要求将第i个bit置位或清,该如何实现呢?受到上一个简单问题的启发,若是能找到第i个bit所对应的元素在数组中的位置以及该bit在元素中的位置,那么问题就迎刃而解了。

    第一步:找出第i个bit所在元素在数组的位置, i>>3(等价于i/8)。
    第二步:找出该bit在元素的位置,i&0x07(等价于i%8)。
    第三步:置位,a[i>>3] |= 1<<(i&0x07)。

    至此,问题得到解决。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值