[C]空间换时间,数组离散存储

诉求:用最少的内存存储尽量大的bool型变量(0,1),使得数组的大小尽可能大,按位存储。
方法:
①定义一个大小为1000的unsigned char类型的数组(实际可以存储8000个元素):

unsigned char map[1000];

②数组元素赋值:例如将index为6222的元素由原来的0置为1

unsigned int index = 6222;
unsigned int map_index = (6222 >> 3) - 1; 	//一个unsigned char包含8个bit,因此先将index除以8,由于8是2的3次方,即右移3位
unsigned int offset = 6222 & (8 - 1);       //取模,由于是2的次方,因此简化成 & (2^n -1)
map[map_index] |= (1 << offset)             //用或的方式赋值

③使用:例如判断某一个index对应的值是否为true(即是否被置为1),假设已经用②的方法将index转换为map_index和offset

if (map[map_index] & (0x00 | (1 << offset))) {
    // do something
}

说明:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值