有意思的需求大量标志位的写法
来源:互联网 发布:图片标识软件 编辑:程序博客网 时间:2024/06/07 10:00
代码中需求大量的on/off标志位。
自己的想法:建立一个byte 数组存放标志。但是这种写法在添加或删除一个标志的时候很麻烦。
别人的一种写法。
把所有的标志放到enum里
enum
{
symbol_1;
symbol_2;
symbol_3;
symbol_4;
......
symble_totle;//用于标示需要的标志位的数目
}
#define int_size sizeof(int)
int mask[(symbol_totle+int_size-1)/int_size];
#define Filter_init (memset(mask,0,sizeof(mask)))
#define Filter_set(b) (mask[b/int_size] |=( (int)i)<<(b%int_size))
#define Filter_is_set(b) (mask[b/int_size] & ( (int)i)<<(b%int_size))
#define Filter_clear(b) (mask[b/int_size] &=(~( (int)i)<<(b%int_size)))
使用的时候就可以直接用了。
想了好久才明白。
实际可以算是一种hash。
可以动态计算出需要的mask数组的大小。把 symbol/int_size 相同的标志位hash到同一个mask中的一个元素中(一个int中)
,然后使用%运算,计算该symbol在组成int的32位(int_size)中的位置。
- 有意思的需求大量标志位的写法
- C# 对于标志位监听事件的 写法
- 有意思的位运算
- 一个很有意思的写法
- 怎样记住标志寄存器的标志位
- 英文文献的一些有意思的写法
- PE section 的标志位
- close_on_exec标志位的作用
- 标志位的判断方法
- 标志位寄存器的说明
- 标志位寄存器的说明
- tcp数据包的标志位
- close_on_exec标志位的作用
- ARM的标志位解释
- 标志位寄存器与CF、OF标志位的区分
- 客户的需求:AIX 大量创建 user
- 常见的标志寄存器FLAG的标志位
- 汇编语言标志位的意义和位置
- Arm嵌入式linux启动过程
- iBatis.Net 入门例子 入门指南 入门教程
- S50卡(RFID)卡
- ssssss
- UBOOT引导Linux内核及向内核传递参数的方式
- 有意思的需求大量标志位的写法
- Java是什么?怎样看待java?
- jtest泄漏
- 代码体验
- 40迹象说明你还是PHP菜鸟
- 使用递归对数组排序,和插入法排序
- 基频分析方法汇总【笔记】
- f架设基于FTP服务的yum服务器
- yum