C# 实现bitmap

来源:互联网 发布:单位的网络不让上b站 编辑:程序博客网 时间:2024/04/30 05:17

C#实现的bitmap能够高效地进行存储标记,排序等

namespace bitmapTest{        class BitMap    {        const int SizeOfByte = 8;        const int SizeOfInt=sizeof(int)*SizeOfByte;        int[] map;        int NumOfBits;        int NumOfInt;        public BitMap(int bits)        {            NumOfBits = bits;            NumOfInt = (NumOfBits % SizeOfInt == 0 ? NumOfBits / SizeOfInt : NumOfBits / SizeOfInt + 1);            map=new int[NumOfInt];            //for (int i = 0; i < 10; i++)            //{            //    Set(i);            //}            //Print(20);            //Console.WriteLine("*******");            //for (int i = 0; i < 5; i++)            //{            //    UnSet(i);            //}            //Print(20);        }        public bool UnSet(int which)        {            if (which<0||which>NumOfBits)            {                return false;            }            map[which / SizeOfInt] &= ~(0x1<<(which%SizeOfInt));            return true;        }        public bool Set(int which)         {            if (which<0||which>NumOfBits)            {                return false;            }            map[which/SizeOfInt] |= 1<<(which%SizeOfInt);            return true;        }        public int TestIfAvaiable(int which)         {            if (which<0||which>NumOfBits)            {                return -1;            }            int test = map[which / SizeOfInt];            if ((test &= 1 << (which % SizeOfInt)) == 0)            {//useable                return 1;            }            else            {                return 0;            }        }        public int FindNextAvaiable()         {            for (int i = 0; i < NumOfBits; i++)            {                if (TestIfAvaiable(i) == 1)                {                    Set(i);                    return i;                }            }            return -1;        }        public void Print(int printNum)         {            if (printNum>NumOfBits)            {                printNum = NumOfBits;            }            else if (printNum<0)            {                printNum = 0;            }            for (int i = 0; i < printNum; i++)            {                if (TestIfAvaiable(i) == 0)                {                    Console.WriteLine(i);                }            }        }    }}


 

原创粉丝点击