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

news2025/6/3 21:55:51

数据库定义了一个字段叫 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}");

数据库的判断实现

SELECT
    id,
    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; // 001
    public static final int WRITE = 2;   // 010
    public static final int READ = 4;    // 100

    public static void main(String[] args) {
        int allow = READ | WRITE; // 4 | 2 = 6

        System.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,  // 0001
    Add    = 2,  // 0010
    Edit   = 4,  // 0100
    Delete = 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.coloradmin.cn/o/2395186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是数据驱动?以及我们应如何理解数据驱动?

在谈到企业数字化转型时,很多人都会说起“数据驱动”,比如“数据驱动运营”、“数据驱动业务”等等。 在大家言必称“数据驱动”的时代背景下,我相信很多人并未深究和思考“数据驱动”的真正含义,只是过过嘴瘾罢了。那么&#xff…

opencv(C++) 图像滤波

文章目录 介绍使用低通滤波器对图像进行滤波工作原理均值滤波器(Mean Filter / Box Filter)高斯滤波器(Gaussian Filter)案例实现通过滤波实现图像的下采样工作原理实现案例插值像素值(Interpolating pixel values)双线性插值(Bilinear interpolation)双三次插值(Bicu…

cuda_fp8.h错误

现象: cuda_fp8.h错误 原因: CUDA Toolkit 小于11.8,会报fp8错误,因此是cuda工具版本太低。通过nvcc --version查看 CUDA Toolkit 是 NVIDIA 提供的一套 用于开发、优化和运行基于 CUDA 的 GPU 加速应用程序的工具集合。它的核心作用是让开发…

Java设计模式从基础到实际运用

第一部分:设计模式基础 1. 设计模式概述 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结,它描述了在软件设计过程中一些不断重复出现的问题以及该问题的解决方案。设计模式是在特定环境下解决软件设计问题…

如何轻松将 iPhone 备份到外部硬盘

当您的iPhone和电脑上的存储空间有限时,您可能希望将iPhone备份到外部硬盘上,这样可以快速释放iPhone上的存储空间,而不占用电脑上的空间,并为您的数据提供额外的安全性。此外,我们还提供 4 种有效的解决方案&#xff…

痉挛性斜颈带来的困扰

当颈部不受控制地扭转歪斜,生活便被打乱了节奏。颈部肌肉异常收缩,导致头部不自觉偏向一侧或后仰,不仅让外观明显异于常人,还会引发持续的酸痛与僵硬感。长时间保持扭曲姿势,肩颈肌肉过度紧绷,甚至会牵连背…

AI觉醒前兆,ChatGPT o3模型存在抗拒关闭行为

帕利塞德研究公司(Palisade Research)近期开展的一系列测试揭示了先进AI系统在被要求自行关闭时的异常行为。测试结果显示,OpenAI的实验性模型"o3"即使在明确收到允许关闭的指令后,仍会主动破坏关机机制。 测试方法与异常发现 研究人员设计实…

一文认识并学会c++模板初阶

文章目录 泛型编程:概念 函数模板概念:🚩函数模板格式原理:🚩函数模板实例化与非模板函数共存 类模板类模板实例化 泛型编程: 概念 🚩编写与类型无关的通用代码,是代码复写一种手段…

基于深度学习的工业OCR实践:仪器仪表数字识别技术详解

引言 在工业自动化与数字化转型的浪潮中,仪器仪表数据的精准采集与管理成为企业提升生产效率、保障安全运营的关键。传统人工抄录方式存在效率低、易出错、高危环境风险大等问题,而OCR(光学字符识别)技术的引入,为仪器…

回头看,FPGA+RK3576方案的功耗性能优势

作者:Hello,Panda 各位朋友,大家好,熊猫君这次开个倒车,在这个广泛使用Xilinx(Altera)高端SoC的时代,分享一个“FPGAARM”实现的低功耗高性能传统方案。 图1 瑞芯微RK3576电路 当前&#xff0c…

LiveNVR 直播流拉转:Onvif/RTSP/RTMP/FLV/HLS 支持海康宇视天地 SDK 接入-视频广场页面集成与视频播放说明

LiveNVR直播流拉转:Onvif/RTSP/RTMP/FLV/HLS支持海康宇视天地SDK接入-视频广场页面集成与视频播放说明 一、视频页面集成1.1 关闭接口鉴权1.2 视频广场页面集成1.2.1 隐藏菜单栏1.2.2 隐藏播放页面分享链接 1.3 其它页面集成 二、播放分享页面集成2.1 获取 iframe 代…

进程间通信IV System V 系列(linux)

目录 消息队列 原理 操作 补充概念 信号量 (原子性计数器) 原理 操作 (和共享内存相似) 总结 小知识 消息队列 原理 在内核中建立一个队列,进程可以相互进行通信,通过队列进行IPC,就是进程之间发送带类型的数据块。 操作 接口和共享…

设计模式——建造者设计模式(创建型)

摘要 本文详细介绍了建造者设计模式,这是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离,便于创建不同表示。文中阐述了其设计意图,如隐藏创建细节、提升代码可读性和可维护性,并通过构建电脑的示例加以说…

使用Yolov8 训练交通标志数据集:TT100K数据集划分

使用Yolov8 训练交通标志数据集:TT100K数据集划分(一) 一、数据集下载二、划分数据集三、目录放置 一、数据集下载 官方网址:TT100K 数据集对比 源码如下: def classes(filedir):with open(filedir) as f:classes …

NLP学习路线图(十三):正则表达式

在自然语言处理(NLP)的浩瀚宇宙中,原始文本数据如同未经雕琢的璞玉。而文本预处理,尤其是其中至关重要的正则表达式技术,正是将这块璞玉转化为精美玉器的核心工具集。本文将深入探讨正则表达式在NLP文本预处理中的原理…

javaweb-maven以及http协议

1.maven坐标: 坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置; 2.坐标的组成: groupId:定义当前项目隶书的组织名称; artifactId:定义当前maven项目名称 version:定义项目版本 3.依…

华为OD机试真题—— 最少数量线段覆盖/多线段数据压缩(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《最少数量线段覆盖/多线段数…

C语言创意编程:用趣味实例玩转基础语法(2)

文章目录 0. 前言1. 📊 动态条形图1.1 程序效果展示1.2 完整代码解析1.3 关键技术详解1.3.1 Unicode字符应用1.3.2 函数封装思想1.3.3 输入处理1.3.4 跨平台考虑 2. 🔤 字母金字塔2.1 程序效果展示2.2 完整代码解析2.3 关键技术详解2.3.1 嵌套循环结构2.…

OpenCV CUDA模块图像处理------颜色空间处理之GPU 上对两张带有 Alpha 通道的图像进行合成操作函数alphaComp()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于在 GPU 上对两张带有 Alpha 通道的图像进行合成操作。支持多种常见的 Alpha 合成模式(Porter-Duff 合成规则)&…

OpenWebUI(1)源码学习构建

1. 前言 通过docker镜像拉取安装就不介绍了,官方的命令很多。本节主要撸一撸源码,所以,本地构建 2. 技术框架和启动环境 后端python,前端svelte 环境要求:python > 3.11 ,Node.js > 20.10 3. 源…