映射表操作中的常用数组

原创 2016年01月21日 13:00:41

1.代码

#define calc_clr_min_seted(m)  (m&(m-1))        /*置0最小位的1*/
#define calc_set_min_clred(m)  (m|(m+1))        /*置1最小位的0*/

const unsigned char cn8s_nearest_seted_in_tbl[256]={/*二进制第一个1所在的位置*/
    8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
};
const unsigned char cn8s_nearest_clred_in_tbl[256]={/*二进制第一个0所在的位置*/
    0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
    0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,
    0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
    0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,
    0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
    0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,
    0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
    0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,8,
};
const unsigned char cn8s_seted_count_tbl[256]={/*二进制中1的数量*/
        0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
        1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
        1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
        2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
        1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
        2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
        2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
        3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8};

二、思路
        以空间换时间,加快对映射区的操作


三、应用场景举例
[映射区] _u8_map;
[数据区]_u8s_data[8][xx];
现在有一个 包含了映射区和数据区的映射表,其中数据区中的某几个字节对应映射表中的某1位,假设映射区长度为1Byte,则可以映射8个区块。


1.我想找到数据区中使用了几个块,即映射区中有几个1:
  uint8 count= cn8s_seted_count_tbl[_u8_map];


2.我想找到数据区中第1个空闲的块:
  uint8 index=  cn8s_nearest_clred_in_tbl[_u8_map];


3.我想枚举数据区中的所有已使用的块

uint8 val = _u8_map;
uint8 index;
while( val )
{
        index = cn8s_nearest_seted_in_tbl[val];        /*得到第一个已使用块的位置*/
        /* TODO... */
        
        /*去掉最小的那个1 例:0110 -> 0100*/
        val = calc_clr_min_seted(val);
}


数组-应用(作为关系映射表,作为临时容器)

学习编程也有不短的时间了,不论是C++还是Java,都有着数组的运用。但是数组在什么时候使用,从来没有考虑过,或者说认为使用顺其自然。可实际开发中,常常无法想起数组,而绞尽脑汁另辟蹊径。后来通过了解,...

Qt中丰富的容器类---数组QVector、链表QLinkedList、映射表QMap、哈希表QHash

在C++里做大型程序时,少不了要与数组、链表等数据结构打交道。就是最简单的字符串也常常让头痛万分,Qt中有QString解决了字符串的头痛,那么其他数组等有没有更简单的解决方案呢?Qt作为一款优秀的类...
  • senkkes
  • senkkes
  • 2015年11月12日 21:10
  • 663

java 散列与散列码探讨 ,简单HashMap实现散列映射表执行各种操作示列

基本功差的勿看! java 散列与散列码探讨 ,简单HashMap实现散列映射表执行各种操作示列...

Opcode Map 操作码映射表阅读指南

opcode Map 作用是详细列出各个汇编指令格式与opcode的对应关系如图1.1 图1.1 给你一个操作码 02 代表"ADD Gb,Eb" 给你一个操作码03 代表“ADD Gv,Ev” ...

IDEA快捷键映射表(中文打印版)

  • 2017年12月05日 01:04
  • 22KB
  • 下载

常见汉字的Unicode和GB2312映射表

  • 2016年07月02日 22:01
  • 56KB
  • 下载

create_mapping如何创建内存映射表

http://blog.csdn.net/huyugv_830913/article/details/5884628 1 ARM920T的MMU工作原理 下图显示了MMU地址转化关...

gb18030与unicode的映射表

  • 2009年05月21日 01:10
  • 33KB
  • 下载

字符映射表,会用的童鞋看看吧

  • 2011年04月16日 14:32
  • 5.85MB
  • 下载

CMap 映射表的学习笔记

CList CMap CArray 是MFC 封装的一个模板类,除了可以使用原子类型 如int当作参数以外,还可以使用编码人员自定义的结构体或者类对象当作传入传出参数, 然而MFC还提供了很多CMap...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:映射表操作中的常用数组
举报原因:
原因补充:

(最多只允许输入30个字)