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

Java 位掩码实战:用位与、位或、异或优雅实现状态 / 权限管理

很多人觉得位运算只能用来炫技、做算法题实则不然。在真实业务、框架底层、权限系统、状态标记中位掩码BitMask 是非常成熟、轻量化、高性能的实现方案。今天就带你落地用 1 个 int 整数存储多种组合状态、权限开关替代冗余的布尔字段、枚举组合代码更简洁、存储更节省。一、什么是位掩码核心思想利用二进制每一位 0 / 1代表一种独立状态 / 权限。一个 int 占 32 位理论上单个 int 可以存储 32 种独立开关状态。相比方案多个 Boolean 字段冗余、数据库字段多、判断繁琐 List 集合存权限占用内存、判断包含效率低 枚举多条件并列代码臃肿if 嵌套爆炸位掩码优势极省存储1 个数字 多种状态 操作高效位运算底层指令速度极快 组合灵活自由叠加、移除、判断状态 大量开源框架、中间件、权限系统原生使用二、定义基础状态常量以用户功能权限举例每一位代表一项独立权限/** * 位掩码 - 权限标记常量 * 每一个常量单独占用二进制中的一位 */ public class PermissionMask { // 第0位查看权限 public static final int VIEW 1 0; // 0001 // 第1位新增权限 public static final int ADD 1 1; // 0010 // 第2位编辑权限 public static final int EDIT 1 2; // 0100 // 第3位删除权限 public static final int DELETE 1 3; // 1000 }1 n1 左移 n 位保证每个权限独占一位互不干扰、可以自由组合。三、四个位运算操作1. 叠加权限位或// 初始无任何权限 int userMask 0; // 赋予查看 新增 userMask userMask | PermissionMask.VIEW; userMask userMask | PermissionMask.ADD;原理两个二进制位进行 | 运算只要有一个为 1结果就是 1否则为 0。userMask 初始 00000000 VIEW 00000001 ---------------------------- userMask | VIEW00000001 即赋权查看2. 判断是否拥有权限位与 判断当前是否包含某项权限使用 位与。// 判断是否有编辑权限 public static boolean hasEdit(int mask) { return (mask PermissionMask.EDIT) ! 0; }原理如果相对应位都是1则结果为1否则为000000101 拥有第0位、3位权限即拥查看、编辑权限 00000100 EDIT ------------------- 00000100 (根据位与计算如有则回因为相对应位都是1则结果为1 再判断不等于0即表示拥有权限)3. 移除指定权限:按位取反 位与精准取消某一项权限不影响其他已开启状态。// 移除删除权限 userMask userMask ~PermissionMask.DELETE;原理DELETE 1 3 00001000第 3 位为 1从 0 开始数 假如当前 userMask 00001101拥有权限第 0 位、2 位、 3 位即拥有查看、编辑、删除权限//取反 ~DELETE DELETE 00001000 ~DELETE 11110111 第 3 位变成 0其余位变成 1 //位与操作 userMask ~DELETE userMask 00001101 ~DELETE 11110111 ---------------------- 结果 00000101第三位变为了0即取消掉了4. 权限反转:异或 ^已有则关闭、没有则开启适合开关类状态。// 反转编辑权限 userMask userMask ^ PermissionMask.EDIT;原理假设 EDIT 1 2 00000100 当前 userMask 00000101第 0 位和第 2 位为 1即拥有查看、编辑权限// 执行 userMask ^ EDIT userMask 00000101 EDIT 00000100 ---------------------- ^ 结果 00000001第二位反转了即编辑权限反转了四、完整可运行工具类public class PermissionUtil { /** * 追加权限 */ public static int addFlag(int mask, int flag) { return mask | flag; } /** * 移除权限 */ public static int removeFlag(int mask, int flag) { return mask ~flag; } /** * 判断是否包含指定权限 */ public static boolean hasFlag(int mask, int flag) { return (mask flag) ! 0; } /** * 反转状态/权限 */ public static int toggleFlag(int mask, int flag) { return mask ^ flag; } }六、真实业务适用场景系统权限控制菜单权限、操作按钮权限、功能白名单组合多状态标记工单状态、任务标签、设备多种运行模式配置项开关功能全局开关、规则组合配置、多策略组合框架底层源码Spring、MyBatis、JDK 大量使用位掩码存储配置与状态七、使用规范与避坑统一用 1 n 定义常量避免手动写死数字可读性差、后期难以维护。禁止超过位数限制int 最多 32 位、long 64 位状态极多改用集合 / 配置表。另外要注意若使用第31位131需注意符号位带来的调试/展示影响不要过度滥用简单 1~2 个开关直接用 boolean 更直观多状态组合场景才是位掩码的主场。数据库存储友好直接存一个 int 数字即可不用加多个字段拓展性极强。八、总结位掩码才是位运算在业务中真正有价值的用法不是奇技淫巧位或 | 加状态、位与 判断状态、取反 位与删状态、异或 ^ 做开关用一个整型承载多种组合状态精简代码、节省存储、高效判断代码可读性、性能、拓展性三者平衡。

相关文章:

Java 位掩码实战:用位与、位或、异或优雅实现状态 / 权限管理

很多人觉得位运算只能用来炫技、做算法题,实则不然。在真实业务、框架底层、权限系统、状态标记中,位掩码(BitMask) 是非常成熟、轻量化、高性能的实现方案。今天就带你落地:用 1 个 int 整数,存储多种组合…...

基于ERNIE-4.5-0.3B-PT的智能文档处理:LangChain整合方案

基于ERNIE-4.5-0.3B-PT的智能文档处理:LangChain整合方案 1. 引言 每天面对堆积如山的文档,你是不是也经常头疼?合同要逐条审核、报告要提炼要点、知识要整理归档,这些重复性工作不仅耗时耗力,还容易出错。现在有了智…...

地理加权回归(GWR)带宽怎么选?R语言中aic、cv、经验法全对比与避坑指南

地理加权回归(GWR)带宽选择实战:R语言中AIC、CV与经验法的深度评测 空间数据分析中,地理加权回归(GWR)因其能够捕捉空间异质性而备受青睐。但许多研究者在模型构建过程中,往往被一个看似简单却至关重要的问题困扰——如何选择最优带宽&#x…...

Dev Containers 远程开发环境优化实战:9大性能瓶颈诊断清单与3分钟修复法

更多请点击: https://intelliparadigm.com 第一章:Dev Containers 远程开发环境优化面试概览 Dev Containers(开发容器)正成为现代云原生开发与远程协作的关键基础设施。在技术面试中,候选人常被考察对容器化开发环境…...

Hashcat提速指南:利用规则文件、GPU调优与分布式破解,让你的密码破解效率翻倍

Hashcat性能优化实战:从规则引擎到分布式计算的进阶指南 在渗透测试和密码恢复领域,效率往往决定着成败。当面对海量哈希值时,传统暴力破解方法如同用勺子舀干大海,而掌握Hashcat的高级技巧则像拥有了现代化抽水设备。本文将揭示如…...

5分钟掌握WebToEpub:终极网页小说转电子书完整指南

5分钟掌握WebToEpub:终极网页小说转电子书完整指南 【免费下载链接】WebToEpub A simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB. 项目地址: https://gitcode.com/gh_mirrors/we/WebToEpub 还在为网络…...

无人机飞行日志可视化终极指南:3分钟掌握专业级数据分析技巧

无人机飞行日志可视化终极指南:3分钟掌握专业级数据分析技巧 【免费下载链接】UAVLogViewer An online viewer for UAV log files 项目地址: https://gitcode.com/gh_mirrors/ua/UAVLogViewer 还在为复杂的无人机飞行数据感到困惑吗?每次飞行后面…...

从零到一:用kohya_ss打造你的专属AI画师,5步开启Stable Diffusion训练之旅

从零到一:用kohya_ss打造你的专属AI画师,5步开启Stable Diffusion训练之旅 【免费下载链接】kohya_ss 项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss 你是否曾梦想拥有一个完全按照你的想法创作的AI画师?现在&#xff…...

从500个AI智能体开源项目到实战:CrewAI构建自动化工作流指南

1. 从“玩具”到“生产力”:我为什么开始系统性研究AI智能体项目如果你和我一样,在过去一年里被各种AI新闻和工具轮番轰炸,从ChatGPT的惊艳亮相,到Midjourney的视觉革命,再到各种“一句话生成应用”的demo,…...

告别MEGA卡顿:手把手教你用Plink和R的ape包构建NJ树并导出nwk文件

告别MEGA卡顿:手把手教你用Plink和R的ape包构建NJ树并导出nwk文件 当面对数百个样本的系统发育分析时,许多研究者都经历过MEGA软件卡顿的痛苦——进度条缓慢移动,CPU占用率飙升,而截止日期却在无情逼近。传统图形界面工具在处理大…...

终极Bebas Neue字体指南:免费开源标题字体完整解决方案

终极Bebas Neue字体指南:免费开源标题字体完整解决方案 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 还在为设计项目寻找专业、免费且视觉冲击力强的标题字体吗?Bebas Neue字体正是你需…...

VLM-Grounder实战:零样本3D视觉定位从原理到部署

1. 项目概述:当大语言模型“看见”三维世界 在机器人、增强现实和智能家居领域,一个核心的挑战是如何让机器理解人类的自然语言指令,并在复杂的三维环境中精准地找到并操作指定的物体。比如,你对家庭服务机器人说“请把沙发左边那…...

HSTracker:macOS炉石传说卡组追踪器的终极免费助手

HSTracker:macOS炉石传说卡组追踪器的终极免费助手 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 如果你是一名macOS平台的炉石传说玩家,想要提…...

USB 速查表:各版本速率、命名规则、线缆及充电速率全解析!

USB 速查表诞生缘由2022 年 5 月 5 日,有人因误解 USB 术语,花时间排查不存在的 bug,于是给自己做了一份 USB 速查表,希望能帮别人节省时间。USB 各版本参数对比以下是不同市场名称的 USB 相关参数:市场名称别名信号传…...

折叠屏市场迎来转折,OPPO 靠硬核产品力实现逆势突围!

4 月 24 日,IDC 正式公布 2026 年第一季度国内手机行业数据,整体市场表现平淡,行业增长乏力已经成为常态。就在这样的大环境下,OPPO 稳住节奏,拿下 16% 的市场份额稳居行业前三。其中最亮眼的突破,无疑是折…...

GRETNA 2.0.0脑网络分析终极指南:从入门到精通

GRETNA 2.0.0脑网络分析终极指南:从入门到精通 【免费下载链接】GRETNA A Graph-theoretical Network Analysis Toolkit in MATLAB 项目地址: https://gitcode.com/gh_mirrors/gr/GRETNA 你是否曾为分析fMRI数据而头疼?面对复杂的脑网络分析需求&…...

终极抢票神器:大麦助手DamaiHelper完整使用指南

终极抢票神器:大麦助手DamaiHelper完整使用指南 【免费下载链接】damaihelper 支持大麦网,淘票票、缤玩岛等多个平台,演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 还在为抢不到演唱会门票而烦恼吗&…...

2025届学术党必备的降重复率方案解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当下学术环境之中,AI论文网站身为辅助研究的工具,主要具备文献检索、…...

【Docker沙箱AI隔离实战手册】:20年SRE亲授5大避坑法则与零信任部署框架

更多请点击: https://intelliparadigm.com 第一章:Docker沙箱AI隔离的核心价值与演进脉络 在AI模型快速迭代与多租户协同开发的背景下,Docker沙箱已成为保障模型推理安全、资源可控与环境可复现的关键基础设施。其核心价值不仅在于进程级隔离…...

抖音内容下载全攻略:douyin-downloader如何帮你高效保存优质素材

抖音内容下载全攻略:douyin-downloader如何帮你高效保存优质素材 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fall…...

8051单片机实战:用TX8T3260芯片实现RF-315/433MHz遥控器信号的学习与重放功能

8051单片机实战:TX8T3260芯片实现RF-315/433MHz遥控信号学习与重放 在智能家居和物联网设备开发中,遥控信号的兼容性一直是工程师面临的挑战。传统方案需要为每个被控设备配备专用遥控器,而学习型遥控技术通过捕获、存储和重放原始信号&#…...

别再只懂MD5了!聊聊变色龙哈希(Chameleon Hash)在区块链和数字签名里的‘后门’妙用

变色龙哈希:区块链可编辑性与数字签名撤销的密码学密钥 想象一下,你正在设计一个医疗区块链系统,突然发现某家医院误上传了患者隐私数据。在传统区块链中,这种错误将永远无法修正——这就是为什么我们需要重新思考哈希函数的"…...

Fedora Media Writer完整指南:一键制作Fedora启动盘的终极神器

Fedora Media Writer完整指南:一键制作Fedora启动盘的终极神器 【免费下载链接】MediaWriter Fedora Media Writer - Write Fedora Images to Portable Media 项目地址: https://gitcode.com/gh_mirrors/me/MediaWriter Fedora Media Writer是一款专为Fedora…...

iOS开发实战:用AV Foundation从零封装一个可复用的视频播放器组件(Swift版)

iOS开发实战:用AV Foundation从零封装可复用的视频播放器组件(Swift版) 在移动应用开发中,视频播放功能已成为许多App的标配需求。无论是社交平台的短视频浏览、教育类App的课程回放,还是电商平台的产品展示&#xff…...

突破光谱限制:YOLOv11多光谱目标检测的架构革新与实战部署

突破光谱限制:YOLOv11多光谱目标检测的架构革新与实战部署 【免费下载链接】ultralytics Ultralytics YOLO 🚀 项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics 在传统计算机视觉领域,RGB三通道图像已无法满足农业监测…...

为什么选择GRETNA:MATLAB脑网络分析的首选工具包?

为什么选择GRETNA:MATLAB脑网络分析的首选工具包? 【免费下载链接】GRETNA A Graph-theoretical Network Analysis Toolkit in MATLAB 项目地址: https://gitcode.com/gh_mirrors/gr/GRETNA 你是否在神经科学研究中需要分析fMRI数据,但…...

从Robinson到Chernozhukov:Double ML的‘正交化’思想如何革新了经济学与生物统计?

从Robinson到Chernozhukov:Double ML如何重塑高维因果推断 1988年,计量经济学家Peter Robinson在《Econometrica》发表了一篇看似普通的半参数回归论文,却无意间埋下了一颗改变机器学习因果推断范式的种子。三十年后,当MIT的Cher…...

5分钟掌握:WebToEpub将网页小说转为电子书的终极指南

5分钟掌握:WebToEpub将网页小说转为电子书的终极指南 【免费下载链接】WebToEpub A simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB. 项目地址: https://gitcode.com/gh_mirrors/we/WebToEpub 你是否曾…...

Linux 删除文件 8 种方法

在 Linux 系统日常运维和开发工作中,删除文件是基础却至关重要的操作。很多人只知道图形界面拖拽到回收站或简单敲 rm 命令,但实际上 Linux 提供了从用户友好到底层系统调用、再到安全擦除的多种方式。每种方法都有独特的适用场景:新手追求简单恢复,运维人员需要批量高效处…...

Windows风扇控制完全指南:Fan Control从入门到精通

Windows风扇控制完全指南:Fan Control从入门到精通 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fa…...