本文转载自微信公众号《UP科技控》,作者conan5566。转载本文请联系UP技控公众号。背景最近在园子里看到这篇文章。看完这篇文章会有意想不到的收获:C#枚举进阶攻略https://mp.weixin.qq.com/s/yipaL6Acil-uxq_bDDgdyg想起来很久以前在这篇文章的总结中,特意找出来谈谈工作中遇到的按位或组合权限字符串的概念。我一直都没有真正理解它。今天终于花了半个下午的时间才弄明白为什么。首先,每个权限数为2的N次方,如:k1=2;//添加k2=4;//删除k3=8;//修改...这样定义功能权限的个数,当需要合并权限时,需要按位或每个拥有的权限个数。例如:权限=k2|k3;//分配增删权限当需要判断权限字符串中是否拥有某个权限时,需要进行按位与。如:if((purview&k1)>0)//判断这个权限字符串是否有权限添加,如果结果>0,则进入if语句的代码块{....}说到这里,肯定会有疑惑,别着急,我来详细解释一下。首先,2的8位二进制值为00000010,4的8位二进制值为00000100,8的8位二进制值为00001000。其次,对8和4进行按位或运算后,得到结果是:4|8=1200000100|00001000=00001100为什么会这样?当进行按位或运算时00000001|00000001=00000001;00000001|00000000=1;00000000|00000000=00000000即其他运算的结果为0,全部为1,所以00000100|00001000=00001100即上述二进制值purview=k2|:4&8=000000100&00001000=00001000=00000000为什么是一样的?按位与运算时,00000001&00000001=00000001;所以00000100&00001000=00000000上面if((purview&k1)>0)的结果是00001100&00000010=00000000,也就是(0>0)=false同样if((purview&k2)>0)结果是00001100&00000100=00000100=4=k2表示(4>0)=true,这样我们就明白了组合权限字符串和判断权限的原理了。说白了就是2N次方的按位与和按位或。应用场景比如在做一些社交需求的时候,经常会遇到那种点赞,推荐,明天加个顶,没完没了。您不能今天添加一个字段,明天再添加一个;这时候Bit操作就派上用场了。每个属性都有2N次方,并且定义了枚举。这样的字段就可以解决了,在枚举中增加一个新的属性即可。代码实现了一个核心方法///
