# 映射表操作中的常用数组

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.我想找到数据区中使用了几个块，即映射区中有几个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);
}

• 本文已收录于以下专栏：

## 数组-应用（作为关系映射表，作为临时容器）

• senkkes
• 2015年11月12日 21:10
• 663

## 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个字)