bitmap是一种以位的状态来表示某种特性的状态的一种操作方式,类似嵌入式中的寄存器操作,在表示某种特性enable/disable的时候很适用且占用的内存空间也很小
比如:做过交换机或者企业网管,路由器的人可能都知道vlan这个概念,vlan域分为0-4095共4096个vlan,我们在端口下设置vlan的时候,就需要一个机制来记录vlan设置与否,
这个就是bitmap; 假设目前设置的vlan为vlan_x,那么我们是这个操作的:
1.首先定义一个128*4的空间(用的32位机器)
int bitmap_vlan[128];
memset(bitmap_vlan, 0, sizeof(bitmap_vlan));
2.设置bit位
bitmap_vlan[vlan_x / 32] | (0x1 << (vlan_x %32))
如果需要检查某个vlan是否设置了,那么只需要这样做:
if ( bitmap_vlan[vlan_x / 32] & (0x1 << (vlan_x % 32)) )
相信C语言比较熟练的人很容易就看懂了,bitmap_vlan共有128个元素,每个元素占4个字节,就是32bit,128*32那就是4096个bit,每个bit能表示一个vlan值。这个以vlan的设置来抛砖引玉,
在实际开发中,很多地方都可以用到bitmap,作为一个C开发,怎能不会bitmap这种操作技巧呢。