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

02_位掩码逻辑及Java示例

文章目录

      • 一、位掩码核心逻辑
      • 二、Java示例:权限管理
      • ‌三、关键点解析
      • ‌四、优缺点分析
      • ‌五、适用场景

位掩码(Bitmask)是一种利用二进制位进行状态管理的技术,通过位运算高效处理多个布尔标志。

一、位掩码核心逻辑

  1. 基本概念
    • 每个二进制位代表一个布尔状态(0/1)。
    • 用整数类型(如 int)存储多个状态,节省空间。
  2. 常用操作
    • 设置位‌:用 |(OR)打开某一位。
    • 清除位‌:用 & ~(AND + NOT)关闭某一位。
    • 检查位‌:用 &(AND)判断某一位是否为1。
    • 切换位‌:用 ^(XOR)反转某一位。
  3. 位移技巧
    • 1 << n:生成第 n 位为1的掩码(从0开始计数)。

二、Java示例:权限管理

javaCopy Codepublic class BitmaskDemo {
    // 定义权限常量(使用二进制位表示不同权限)
    public static final int READ = 1 << 0;   // 0001 (第0位)
    public static final int WRITE = 1 << 1;  // 0010 (第1位)
    public static final int EXECUTE = 1 << 2; // 0100 (第2位)

    public static void main(String[] args) {
        // 组合权限:READ + WRITE
        int userPermissions = READ | WRITE;

        // 检查权限
        System.out.println("是否有读权限? " + ((userPermissions & READ) != 0)); // true
        System.out.println("是否有执行权限? " + ((userPermissions & EXECUTE) != 0)); // false

        // 添加执行权限
        userPermissions |= EXECUTE;
        System.out.println("添加后是否有执行权限? " + ((userPermissions & EXECUTE) != 0)); // true

        // 移除写权限
        userPermissions &= ~WRITE;
        System.out.println("移除后是否有写权限? " + ((userPermissions & WRITE) != 0)); // false

        // 切换读权限(存在则移除,不存在则添加)
        userPermissions ^= READ;
        System.out.println("切换后是否有读权限? " + ((userPermissions & READ) != 0)); // false
    }
}

‌三、关键点解析

  1. 权限组合

    javaCopy Code
    
    
    
    int permissions = READ | WRITE; // 同时拥有读和写权限
    
  2. 多权限检查

    javaCopy Code// 是否同时拥有读和写权限?
    boolean hasBoth = (permissions & (READ | WRITE)) == (READ | WRITE);
    
  3. 清空所有权限

    javaCopy Code
    
    
    
    permissions = 0; // 所有位设为0
    
  4. 遍历所有权限

    javaCopy Codefor (int i = 0; i < 32; i++) { // int类型有32位
        if ((permissions & (1 << i)) != 0) {
            System.out.println("权限位 " + i + " 被启用");
        }
    }
    

‌四、优缺点分析

  • 优点

    ‌:

    • 高效‌:位运算速度极快。
    • 紧凑‌:一个 int 可存储32个布尔值,节省内存。
  • 缺点

    ‌:

    • 可读性差‌:需维护常量定义。
    • 位数限制‌:int 最多32位,long 最多64位。

‌五、适用场景

  • 权限系统(如Linux文件权限)
  • 功能开关(如游戏中的技能状态)
  • 紧凑存储(如网络协议中的标志位)

通过合理使用位掩码,可以在内存敏感和高性能需求的场景中显著提升效率。

相关文章:

  • 阿里云备案有必要选择备案管家服务吗?自己ICP备案可以吗?
  • Java第四节:idea在debug模式夏改变变量的值
  • 详细解释:k ≈ 3 对应 99.7% 置信度
  • 大模型面经 | 手撕多头注意力机制(Multi-Head Attention)
  • 笔记本电脑突然无法开机电源灯亮但是屏幕无法点亮
  • GitLab 17.x 在 Ubuntu 24.04 上安装配置
  • 华为手机清理大数据的方法
  • JVM调优详解
  • Arduino示例代码讲解:String replace() 字符串替换
  • Spring Boot 支持的内嵌服务器(Tomcat、Jetty、Undertow、Netty(用于 WebFlux 响应式应用))详解
  • 【Android读书笔记】读书笔记记录
  • springboot 项目 jmeter简单测试流程
  • 【STM32单片机】#8 定时器编码器接口ADC模数转换器
  • 【Mysql】死锁问题详解
  • 用AI生成系统架构图
  • 在线上定位1G日志文件中的异常信息时,我这样做合适吗
  • 微信小程序实战案例 - 餐馆点餐系统 阶段 4 - 订单列表 状态
  • 《AI大模型应知应会100篇》第14篇:大模型商业化现状:主流应用场景及盈利模式
  • idea+vue3+mybatis+springBoot3前后端分离实现对一张表的增删改查(完整代码版)
  • Python基于Django的房屋信息可视化及价格预测系统(附源码,文档说明)
  • 素马杭州网站设计介绍/google chrome 网络浏览器
  • wordpress 手机首页设置/做网站建设优化的公司排名
  • 电商网官方网站/济南网站建设哪家专业
  • 嘉兴专业定制网站制作企业/新闻稿发布
  • 装修全包报价明细表2021/搜索引擎优化的核心及内容
  • 免费一键网站/google海外版