逻辑运算实现位向量

1.位向量的含义

位向量指的是由一些二进制位组成的向量,包含位向量的设置,清零以及探测功能,例如:如果有1,2,4,5这几个数组,则需要二进制数110110表示。现在需要用32位的int型数据的每一位表示一个数据,因为正常情况下数据范围大于32,所以需要int数组来表示,即a[0]表示0-31,a[1]表示32-63,以此类推。

2.代码实现

#define N 10000000        //表示数据的最大值
#define BITPERWORD 32     //表示int所占的字节数
#define SHIFT 5           //表示2^5=32位的int
#define MASK 0x1f         //5位的掩码,表示二进制数11111

int array[1 + N / BITPERWORD];       //存储最大值为N所需要位向量的数组,初始值均为0

//设置位向量
void set(int i)
{
	array[i >> SHIFT] |= (1 << (i&MASK));     //i >> SHIFT表示它存放在数组的哪一个元素下面,i&MASK表示i%32
}

//清楚数组第i位为0
void clear(int i)
{
	array[i >> SHIFT] &= ~(1 << (i&MASK));
}

//返回array的第i位
int test(int i)
{
	return array[i >> SHIFT] & (1 << (i & MASK));
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值