前不久,在设计个性化定制预警消息功能时,通过位与运算方法实现了该功能,现同大家一块分享。
预警系统需提供设定什么时间为工作日,工作日设置,采用简单的按星期设置方式,用户可设定在每周的某几天为工作日,在工作日和非工作日可分别设置其接受预警消息的方式,如:短信/邮件。如果用户除周六、日为假日,我们将对应的工作日位标识为“1”,非工作日标识为“0”,如:
sun mon tue thr wed fri sat 二进制 十进制
0 1 1 1 1 1 0 0111110 62
即:用户具有的总权限 = 2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^0 = 62 同理,也可以用位标识方法对工作日、非工作日预警方式进行标识。
通过位与运算,我们可以很简单实现权限判断,如下方法:
/**
* 实现,单操作权限判断
* @param userPurview 用户具有的总权限
* @param optPurview 权限位
* @return 权限校验,有权限返回true,反之false
*/
public static boolean checkPower(int userPurview, int optPurview){
int purviewValue = (int)Math.pow(2, optPurview);
return (userPurview & purviewValue) == purviewValue;
}
如:判断是否周一为工作日,则: checkPower(62,1)为true,通过该方式实现权限判断,是不是很方便,根据此原理,在工作日和非工作日接受预警消息的方式同样实现起来非常简单。