什么是位操作策略?
位操作策略来自电子电路的逻辑运算。最初是通过电子管来实现的,后来延伸到硬件系统和软件环境中。它相当于电子电路的加减乘除。
用微软.net开发的可以不用看,微软有自己一套专门处理这个的类库
按位与,或
原始值 | 参考值 | 运算方式 | 结果 | 说明 |
---|---|---|---|---|
101(二进制) | 001 | & 与 | 001 | 只有同位上都为1才为1,否则为0 |
101 | 001 | 竖线(在这里是制表符) 或 | 101 | 两个数字比较时,当前位 |
101 | 无 | ~值 | 010 | 将当前数值的所有位取反 |
001 | 无 | 1<<2 | 100 | 按位左移,用于将整个数值的二进制编码整体向左移位 |
记住这些就可以处理策略了
位开关策略
首先设置位开关
const dev1_NONE = 0;
const dev1_enableLog = 1<<0;
const dev1_debugFogOpen = 1<<30;
const dev1_enableMoney = 1<<31;
设置起来非常简单,位开关就是用到了左移这个功能将1移动到指定位置上,一共可以设置32个开关,左移不可以到32,因为一般的程序中枚举或宏定义数值都只保持数字32位(有些语言支持64或者自定义,但如果你对多平台语言都有所接触的话,就把它默认成32位处理就好)
设置策略配置
//debug
const dev1_combin = dev_enableLog | dev_debugFogOpen;
//publish
//const dev1_combin = dev_NONE | dev_enableMoney;
你将会发现,当你切换这两个策略文件的时候,整个项目都随之变化了。这就是位操作策略。如果你用c宏定义,你甚至可以废弃掉无用的代码(宏条件作用在开发周期下,宏条件为假情况下代码不会被编译)
使用策略配置
定义
function DEV1(dev1sth){
return dev1_combin & dev1sth;
}
使用
if(DEV1(dev1_enableLog)){
console.log("test xxxx");
}
定义2 取非
function DEV1Not(dev1sth){
return dev1sth&~ dev1_combin;
}
使用
if(DEV1Not(dev1_enableLog)){
console.log("test xxxx");
}
为什么使用位操作
因为快。
如果不考虑效率,你完全可以用字符串,或者数组来进行这些操作。
有了这些策略,你就不会因为忘记关闭调试,或忘记开启功能而导致项目陆续因为马虎而埋下的错误。而且有了策略模式,修改起代码,也能更有准对和目的行,你会很快查找到你要修改的部分,也很快的回忆起你修改的内容。它很适合你去交接一个已有的项目,不干扰原项目代码下的继续渗透扩展。
32个开关用完了怎么办???
看到我写的dev1_xxx了吗?你可以多放几种策略,团队开发的时候每个人的策略宏定义商讨互不干扰,不会相互影响到对方。
一些小窍门
在多种语言环境下都有枚举功能,将枚举作为开关更方便管理,这时候DEV1这样的方法函数在输入参数的地方可以规定成只能输入当前枚举值,这样就增强了语法严格性。不用担心多种策略之间相互冲突了。
网友评论