当前位置: 首页 > article >正文

数据库中 用一个值实现类似linux中的读 写执行以及理解安卓杂用的按位或运算

数据库定义了一个字段叫 allow,

4 读2 写 1 执行 如果是 7 就代表是可读可写 可执行 ,如果是5 就是可读 可执行 , 那具体代码咋写呢

[Flags]
public enum Permission
{None = 0,Execute = 1,Write = 2,Read = 4
}// 假设你从数据库取到的 allow 值是一个整数
int allow = 5; // 代表 读+执行bool canRead = (allow & (int)Permission.Read) != 0;
bool canWrite = (allow & (int)Permission.Write) != 0;
bool canExecute = (allow & (int)Permission.Execute) != 0;
Console.WriteLine($"Read: {canRead}, Write: {canWrite}, Execute: {canExecute}");

数据库的判断实现

SELECTid,allow,CASE WHEN (allow & 4) != 0 THEN '是' ELSE '否' END AS 可读,CASE WHEN (allow & 2) != 0 THEN '是' ELSE '否' END AS 可写,CASE WHEN (allow & 1) != 0 THEN '是' ELSE '否' END AS 可执行
FROM your_table;

举一反三
我们也可以在代码中这样表示

下面就代表我定义了一个可读可写的,

int allow = Permission.READ | Permission.WRITE; // 4 | 2 = 6(二进制 110)

判断

boolean canRead = (allow & Permission.READ) != 0;
boolean canWrite = (allow & Permission.WRITE) != 0;
boolean canExecute = (allow & Permission.EXECUTE) != 0;

完整案例

public class Permission {public static final int EXECUTE = 1; // 001public static final int WRITE = 2;   // 010public static final int READ = 4;    // 100public static void main(String[] args) {int allow = READ | WRITE; // 4 | 2 = 6System.out.println("Can Read: " + ((allow & READ) != 0));System.out.println("Can Write: " + ((allow & WRITE) != 0));System.out.println("Can Execute: " + ((allow & EXECUTE) != 0));}
}

ok
然后来到了安卓的伪代码

public class View {// 定义系统 UI 的标志位public static final int SYSTEM_UI_FLAG_VISIBLE            = 0x00000000; // 默认可见public static final int SYSTEM_UI_FLAG_FULLSCREEN         = 0x00000004; // 隐藏状态栏public static final int SYSTEM_UI_FLAG_HIDE_NAVIGATION    = 0x00000002; // 隐藏导航栏public static final int SYSTEM_UI_FLAG_IMMERSIVE_STICKY   = 0x00001000; // 沉浸式模式private int systemUiVisibility = SYSTEM_UI_FLAG_VISIBLE;public void setSystemUiVisibility(int flags) {systemUiVisibility = flags;System.out.println("已设置 UI flags = " + Integer.toBinaryString(flags));}public int getSystemUiVisibility() {return systemUiVisibility;}
}public class Activity {private View decorView = new View();public void onCreate() {// 组合多个 UI flags:全屏 + 隐藏导航栏 + 沉浸模式int flags = View.SYSTEM_UI_FLAG_FULLSCREEN| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;decorView.setSystemUiVisibility(flags);// 检查是否设置了全屏if ((decorView.getSystemUiVisibility() & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0) {System.out.println("✅ 全屏模式已开启");}}
}

ok再来复习一下安卓的常见代码

Intent intent = new Intent(context, MyActivity.class);// 添加多个 flag
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);// 判断是否包含某个 flag
if ((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {Log.d("Intent", "是 NEW_TASK 启动模式");
}
Paint paint = new Paint();// 开启抗锯齿、滤波、描边
paint.setFlags(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG);

c#

[Flags]
public enum Permission
{None   = 0,Query  = 1,  // 0001Add    = 2,  // 0010Edit   = 4,  // 0100Delete = 8   // 1000
}

使用示例

class Program
{static void Main(){// 组合权限:查询 + 编辑Permission userPerm = Permission.Query | Permission.Edit;// 判断是否有“添加”权限if ((userPerm & Permission.Add) == Permission.Add){Console.WriteLine("有添加权限");}else{Console.WriteLine("没有添加权限");}// 添加“删除”权限userPerm |= Permission.Delete;// 移除“查询”权限userPerm &= ~Permission.Query;Console.WriteLine($"当前权限: {userPerm}");}
}
http://www.lryc.cn/news/2395186.html

相关文章:

  • 什么是数据驱动?以及我们应如何理解数据驱动?
  • opencv(C++) 图像滤波
  • 【线上故障排查】缓存热点Key导致Redis性能下降的排查与优化(面试题 + 3 步追问应对 + 案例分析)
  • cuda_fp8.h错误
  • Java设计模式从基础到实际运用
  • 网络安全基础--第九天
  • 鸿蒙如何引入crypto-js
  • 通过HIVE SQL获取每个用户的最大连续登录时常
  • 如何轻松将 iPhone 备份到外部硬盘
  • Matlab数据类型
  • 痉挛性斜颈带来的困扰
  • AI觉醒前兆,ChatGPT o3模型存在抗拒关闭行为
  • Flask项目进管理后台之后自动跳回登录页面,后台接口报错422,权限问题
  • HarmonyOS如何优化鸿蒙Uniapp的性能?
  • 使用逆强化学习对网络攻击者的行为偏好进行建模
  • 青少年编程与数学 02-020 C#程序设计基础 12课题、使用控件
  • 一文认识并学会c++模板初阶
  • 基于深度学习的工业OCR实践:仪器仪表数字识别技术详解
  • java导入excel
  • 回头看,FPGA+RK3576方案的功耗性能优势
  • csharp ef入门
  • 长短期记忆网络:从理论到创新应用的深度剖析
  • LiveNVR 直播流拉转:Onvif/RTSP/RTMP/FLV/HLS 支持海康宇视天地 SDK 接入-视频广场页面集成与视频播放说明
  • MySQL索引与性能优化入门:让查询提速的秘密武器【MySQL系列】
  • 进程间通信IV System V 系列(linux)
  • 设计模式——建造者设计模式(创建型)
  • AWS WebRTC:获取ICE服务地址(part 3):STUN服务和TURN服务的作用
  • 使用Yolov8 训练交通标志数据集:TT100K数据集划分
  • NLP学习路线图(十三):正则表达式
  • [VMM]现代 CPU 中用于加速多级页表查找的Page‐Table Entry原理