# 什么你数学是体育老师教的？不知道2N次方数- 按位与，按位或

## 看完这篇会有意外收获：C#枚举高级战术

https://mp.weixin.qq.com/s/yipaL6Acil-uxq_bDDgdyg

## 说说概念

k2=4 ; //删除

k3=8; //修改

purview = k2|k3; // 赋给添加和删除权限

if（(purview & k1) >0）//判断此权限串是否拥有添加权限，结果>0 则进入if语句代码块中

{

….

}

4的8位二进制值为00000100

8的8位二进制值为00001000

4|8 = 12

00000100 |00001000 = 00001100

4&8=0

00000100 &00001000 = 00000000

## 代码实现

``/// <summary>``/// 计算权限总和``/// </summary>``/// <param name="OldStatus">数据库现有权限总和</param>``/// <param name="Action">取消或设置操作（0取消，1设置）</param>``/// <param name="StatusVal">设置操作对应的状态值</param>``/// <returns></returns>``public static int ReturnStatusTotal(int OldStatus, int Action, int StatusVal)``{``int NewStatus = OldStatus;``if (Action == 1)``{``//判断此权限串是否拥有相应操作,不包括时加入权限``if ((OldStatus & StatusVal) <= 0)``{``NewStatus = OldStatus | StatusVal;``}``}``else``{``//判断此权限串是否拥有相应操作,有权限时移除权限``if ((OldStatus & StatusVal) > 0)``{``NewStatus = OldStatus & ~StatusVal;``}``}``return NewStatus;``}``NewStatus = CommonUtilities.ReturnStatusTotal(OldStatus, objRequest.Action, (int)StatusEnum.ZhiDing);``