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這種操作技巧呢。