*******
/**
* 设置操作
* @param permission 哪一位
* @param yes 允许 或 不允许
*/
public void setPermission(int permission, boolean yes) {
//进行位运算
int temp=1;
//移位 000001 0000010 00000100 00001000
temp=temp << permission;
if(yes){
//目标是设置为可操作 将操作为设置为1 其他位不变
// 0|X=X 1|X=1
aclState |=temp;
}else{
//目标是设置为不可操作 将操作为设置为0 其他位不变
//首先取反 111110 1111111101 11111111011 1111111110111
// 0&X=0 1&X=X
aclState &=~temp;
}
}
/**
* 查询某个位的开关
* @param permission 哪一位
* @return 1表示允许 0表示不允许 -1表示不确定
*/
public int getPermission(int permission) {
//0000001
int temp=1;
//0000001 000000010 0000000100 00000001000
temp=temp << permission;
//0&X=0 1&X=X 只有当目标位不为0时即为1时 temp才能为非0
temp=aclState & temp;
if(temp!=0){
//说明为该操作位 为 1 可执行
return ACL_YES;
}
return ACL_NO;
}
// 都是正数才管用的 var n:int = 5; // 设置位 n |= flag; // 取消位 ~flag & n; // 获取位 n & flag;
**********