打印
[应用相关]

操作系统常用到的数据结构-----------位图

[复制链接]
1479|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stm32jy|  楼主 | 2019-6-29 19:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//位图初始化
void BitMapInit(t_bitmap *bitmap)
{
  bitmap->bitmap = 0;
}

使用特权

评论回复
沙发
stm32jy|  楼主 | 2019-6-29 19:32 | 只看该作者
//位图置1操作
void BitMapSet(t_bitmap *bitmap,uint32_t pos)
{
  bitmap->bitmap |= 1<<pos;
}

使用特权

评论回复
板凳
stm32jy|  楼主 | 2019-6-29 19:33 | 只看该作者
//位图清0操作
void BitMapClear(t_bitmap *bitmap,uint32_t pos)
{
  bitmap->bitmap &= ~(1<<pos);
}

使用特权

评论回复
地板
stm32jy|  楼主 | 2019-6-29 19:34 | 只看该作者
//位图查找操作,查找第一个为1的位置(从高位到低位)
uint32_t  BitMapQueryFirstSet(t_bitmap *bitmap)
{
  static const uint8_t quickFindTable[] =
        {
                  /* 00 */ 0xff, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* 10 */ 4,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* 20 */ 5,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* 30 */ 4,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* 40 */ 6,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* 50 */ 4,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* 60 */ 5,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* 70 */ 4,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* 80 */ 7,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* 90 */ 4,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* A0 */ 5,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* B0 */ 4,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* C0 */ 6,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* D0 */ 4,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* E0 */ 5,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
            /* F0 */ 4,    0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
        };
        if(bitmap->bitmap & 0xff)
        {
           return quickFindTable[bitmap->bitmap & 0xff];
        }
        else if(bitmap->bitmap>>8 & 0xff)
        {
           return quickFindTable[bitmap->bitmap>>8 & 0xff]+8;
        }
  else if(bitmap->bitmap>>16 & 0xff)
        {
           return quickFindTable[bitmap->bitmap>>16 & 0xff]+16;
        }
        else if(bitmap->bitmap>>24 & 0xff)
        {
           return quickFindTable[bitmap->bitmap>>24 & 0xff]+24;
        }
        else
        {
                return 32;
        }
       
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

1118

帖子

4

粉丝