数据库中 用一个值实现类似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}");}
}