eg:如何利用位邏輯運算實現Bit-map,要求可以表示的最大值爲10,000,000
//思路,一個整形能表示32位,10000000/32獲得要多少個整形
//因爲不可能恰好能被32整除,因此要多加一個整形來表示10000000
#include<iostream>
using namespace std;
#define BITWORD 32
#define SHIFT 5 //一個數左移5位就至關於除以32
#define MASK 0x1F //掩碼,肯定一個數要表示在一個32位的哪一位上,左移0~31
#define N 10000000
int a[1+N/BITWORD]; //申請一個最小的能表示10000000的數組
void set(int count) //設置表示數count的對應位爲1,count>=0
{
a[count>>SHIFT] |= ( 1<<( count & MASK ) );
//count>>SHIFT獲得count要存放在數組中哪個int中,count&MASK
//獲得在該int中,哪一位要置1。MASK = 0x1F。
//最後|=加上要置爲1的位
}
void clr(int count) //將表示count的位置0
{
a[count>>SHIFT] &= ~( 1<<( count & MASK ) );
}
bool test(int count) //返回表示count的對應位的狀態
{
return !!(a[count>>SHIFT] & ( 1<<( count & MASK ) ));
}
|
int main()
{
set(10);
set(20);
cout<<test(10)<<" "<<test(20)<<" "<<test(30)<<endl;
clr(10);
clr(11);
cout<<test(10)<<" "<<test(20)<<" "<<test(30)<<endl;
cout<<test(11)<<endl;
system("pause");
}
![]() |