首页 > 编程知识 正文

微机原理6个状态标志位,分析六个状态标志位

时间:2023-05-05 19:15:39 阅读:61234 作者:165

在许多框架中,可以看到类似int xxx=0x0010的代码。 我们只知道他表示状态。 牛x,但我完全不知道为什么会这样,或者它是如何表示多个不同的状态的。

回顾位运算

位运算符号列表

英文名中文名OR或AND与~NOT非^XOR异或-右移-左移-无符号右移(最高有效位始终补0 ) )各运算符的运算方式

1 | 0 //1,每2个1个结果为1,其他情况为0~10//0,2个结果都为1,其他情况为0~ 1 //0的单眼运算,运算值的倒数1 ^ 0 //1与运算相关的2个值不同的话为1。 如果相同,则标记位01 1 //10、将左边的值移动指定位数1010 1 //101、将左边的值向右移动指定位数的标记位:以及将整数中的一个位移动到标记位,并且给出特定意义。 保存用户的添加、删除、变更权限时,4种权限的组合,共有16中状态。

公共静态输入无=0; 公共静态输入添加=1; 公共静态输入删除=2; 公共静态输入读取=4; 公共静态输入更新=8; 我们表示这几个值是否在某个方向。 为什么要使用这些特定的值?

1=00012=00104=01008=1000这些值都是2的幂,如果将这些值转换为二进制值,则可以看到每个值都有一个位,其他位为0,并且相同的位不会重复

这样,各状态参与比特运算总是只影响该转变比特的值

定义表示权限的另一个标识符permission。 默认情况下没有任何权限

如果需要添加READ,则添加权限

权限|=添加; //0|0001|0100=0101/* 0000010100---- 0101 * /如果分别添加两个权限: ADD、READ,则这两个标志位的值为1

如何检查是否有权限

booleancanread=(权限读取)!=0///010100=0100=add/* * 01010100---- 0100 * /如何删除权限

permission ^=read//0101 ^ 0100=0001/* * 010100---- 0001 * /以其他方式删除权限

permission=~read//01011011=0001/*~0100---- 10110101---0001 * /标志位的优势标志位可以减少很多代码,理解起来很简单

如果使用布尔向对象添加读取和添加权限,则

安全读取(true; setcanadd (真; 设置计数(假; set candelete (假; 使用标志位

添加权限(read ); 确定布尔是否具有读取权限和添加权限

isCanRead (; isCanAdd (; 使用标志位

has权限(添加; 判断boolean是否只有读取和添加权限

iscanadd(iscanread! iscan更新()! isCanDelete ()的标志位

isjustallow (读取|添加); 上例中的代码

class permission { publicstaticfinalintnone=0; 公共静态金融int add=1; 公共静态最终删除=2; 公共静态最终读取=4; 公共静态最终更新=8; private int mPermission=NONE; publicvoidaddpermission (int permission ) { mPermission |=permission; } publicbooleanhaspermission (int permission ) return (mpermission permission )!=none } publicbooleanisjustallow (int permission ) { return mPermission==permission; }发布权限(int permission ) { m permission ^=权限; }转行: https://www.de nua.cn/blog/article/26 /

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。