位图法在实际项目中的运用

位图法即bitmap算法,实际是用每一位来存放某种状态。在项目中运用的比较多,常常用于位图法将某些运行过程中的关键步骤记录下来,便于后期运行过程定位跟踪。位图法也常常用于处理大数据,比如用1个int32类型的变量可以表示0~31,如果用常见的int32类型来表示这些数据,则需要32个int类型的变量表示,这极大地浪费了内存。一般来说0~A范围内的数据可以用A/32 int类型大小的数组表示,下面是其实现代码:

//============================================================================
// Name        : bitmap演示程序
// Author      : @CodingGeek
// Version     : 1.0
// Copyright   : Your copyright notice
// Description :bitmap的UINT32代码示例
//============================================================================
#include <stdio.h>

#define bitmap_set(puiBitmap, A) puiBitmap[(A)/32] |= (1UL << ((A) & 31))
#define bitmap_unset(puiBitmap, A) puiBitmap[(A)/32] &= ~(1UL << ((A) & 31))

void testBitmap(void)
{
	unsigned int uiBitmap[32] = {0};
	for (int i = 32; i < 128; i++)
	{
		bitmap_set(uiBitmap, i);
	}

	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 32; j++)
		{
			if (uiBitmap[i]>>(j) & 0x1)
			{
				printf("%d\n", i * 32 + j);
			}
		}
	}

	printf("****************************\n");

	for (int i = 64; i < 96; i++)
	{
		bitmap_unset(uiBitmap, i);
	}

	for (int i = 0; i < 4; i++)
		{
			for (int j = 0; j < 32; j++)
			{
				if (uiBitmap[i]>>(j) & 0x1)
				{
					printf("%d\n", i * 32 + j);
				}
			}
		}
}




int main(void)
{
    testBitmap();
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值