Java按位&运算符多重权限

标签 java bitwise-operators

我正在开发一个java web应用程序,在数据库表中我有一个数字类型的列。但该列用于存储多个值。 (即如下所示的权限)

  1. 什么都没有 = 1;
  2. 查看 = 2;
  3. 添加 = 4;
  4. 编辑 = 8;
  5. 插入 = 16;
  6. 删除=32;
  7. 全部 = 64;

问题

  1. 如果该列的值为 3 --> 那么我不需要选择任何内容,查看为 许可。
  2. 如果该列的值为 12 --> 那么我需要选择 add , 编辑。

类似这样的事情

我明白我们可以通过按位运算符来做到这一点。任何实现此目的的代码都很棒。

最佳答案

我认为你的意思是按位运算和二进制文字。

在您的情况下,您必须使用位掩码(固定版本,谢谢@Paul Boddington 和@Jaroslaw Pawlak):

final int MASK_NOTHING = 1;
final int MASK_VIEW = 0b10;
final int MASK_ADD = 0b100;
final int MASK_EDIT = 0b1000;
final int MASK_INSERT = 0b10000;
final int MASK_DELETE = 0b100000;
final int MASK_ALL = 0b1000000;
int column = 0; //YOUR DATA HERE

if((column & MASK_NOTHING) > 0)
{

}

if((column & MASK_VIEW) > 0)
{

}

请注意:所有可能的位标志都可以独立设置...因此要么防止一次设置多个位标志,要么处理所有这些情况

二进制文字:https://docs.oracle.com/javase/7/docs/technotes/guides/language/binary-literals.html接线员:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

关于Java按位&运算符多重权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543988/

相关文章:

Java Simpledateformat Parse - 返回错误的日期时区问题?

c++ - 按位和移位操作数以清除选定的十六进制数

c++ - 在没有条件/分支的情况下使用逻辑 AND/OR

c++ - 如何在 C++ 上的 "double"上使用按位运算符?

java - 命令仅在每次重新加载时有效一次

java - 将 spring 配置文件添加到 SpringBootTest 中的现有配置文件中

java - 恢复除法算法的实现

java - Spring Boot JSON解析错误: Cannot deserialize error

c - 如何仅使用 ~ 和 | 在 c 中进行按位 ANDING

c - 什么是位掩码?