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

Java进阶——位运算

        位运算直接操作二进制位,在处理底层数据、加密算法、图像处理等领域具有高效性能和效率。本文将深入探讨Java中的位运算。

本文目录

    • 一、位运算简介
      • 1. 与运算
      • 2. 或运算
      • 异或运算
      • 取反运算
      • 左移运算
      • 右移运算
      • 无符号右移运算
    • 二、位运算的实际应用
      • 1. 权限管理
      • 2. 交换两个变量的值

一、位运算简介

在Java中,位运算主要有以下几种:与(&)、或(|)、异或(^)、取反(~)、左移(<<)、右移(>>)和无符号右移(>>>)。

1. 与运算

与运算的规则是:只有当两个对应位都为 1 时,结果位才为 1,否则为 0。

public class BitwiseAnd {
    public static void main(String[] args) {
        int a = 5; // 0101
        int b = 3; // 0011
        int result = a & b; // 0001
        System.out.println("5 & 3 = " + result);
    }
}

2. 或运算

或运算的规则是:只要两个对应位中有一个为 1,结果位就为 1,只有当两个位都为 0 时,结果位才为 0。

public class BitwiseOr {
    public static void main(String[] args) {
        int a = 5; //  0101
        int b = 3; //  0011
        int result = a | b; //  0111
        System.out.println("5 | 3 = " + result);
    }
}

异或运算

异或运算的规则是:当两个对应位不同时,结果位为 1,相同时结果位为 0。

public class BitwiseXor {
    public static void main(String[] args) {
        int a = 5; // 0101
        int b = 3; // 0011
        int result = a ^ b; //  0110
        System.out.println("5 ^ 3 = " + result);
    }
}

取反运算

取反运算会将每一位取反,即 0 变为 1,1 变为 0。

public class BitwiseNot {
    public static void main(String[] args) {
        int a = 5; //  0101
        int result = ~a; //  1010
        System.out.println("~5 = " + result);
    }
}

取反运算得到的结果是补码表示

左移运算

左移运算会将二进制位向左移动指定的位数,右边空出的位用 0 填充。

public class LeftShift {
    public static void main(String[] args) {
        int a = 5; //  0101
        int result = a << 2; //  010100
        System.out.println("5 << 2 = " + result);
    }
}

右移运算

右移运算会将二进制位向右移动指定的位数,左边空出的位用符号位填充(正数用 0 填充,负数用 1 填充)。

public class RightShift {
    public static void main(String[] args) {
        int a = 5; //  0101
        int result = a >> 1; //  0010
        System.out.println("5 >> 1 = " + result);
    }
}

无符号右移运算

无符号右移运算会将二进制位向右移动指定的位数,左边空出的位用 0 填充,不考虑符号位。

public class UnsignedRightShift {
    public static void main(String[] args) {
        int a = -5; //  11111111111111111111111111111011
        int result = a >>> 1; //  01111111111111111111111111111101
        System.out.println("-5 >>> 1 = " + result);
    }
}



二、位运算的实际应用

1. 权限管理

位运算可以用于权限管理,通过不同的位来表示不同的权限。

public class PermissionManager {
    public static final int READ_PERMISSION = 1; // 0001
    public static final int WRITE_PERMISSION = 2; // 0010
    public static final int EXECUTE_PERMISSION = 4; // 0100

    private int permissions;

    public PermissionManager() {
        this.permissions = 0;
    }

    // 添加权限
    public void addPermission(int permission) {
        permissions = permissions | permission;
    }

    // 检查权限
    public boolean hasPermission(int permission) {
        return (permissions & permission) == permission;
    }

    public static void main(String[] args) {
        PermissionManager manager = new PermissionManager();
        manager.addPermission(READ_PERMISSION);
        manager.addPermission(WRITE_PERMISSION);
        System.out.println( manager.hasPermission(READ_PERMISSION));
        System.out.println(manager.hasPermission(EXECUTE_PERMISSION));
    }
}

2. 交换两个变量的值

不使用临时变量,通过异或运算可以交换两个变量的值:

public class SwapVariables {
    public static void main(String[] args) {
        int a = 5;
        int b = 3;
        System.out.println(" a = " + a + ", b = " + b);
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        System.out.println(" a = " + a + ", b = " + b);
    }
}



← 上一篇 Java进阶——常用类及常用方法详解
记得点赞、关注、收藏哦!
下一篇 Java进阶——数组超详细整理 →

相关文章:

  • 系统间交互时,怎么校验两个系统所在服务器时间是否一致
  • 【android bluetooth 协议分析 06】【l2cap详解 5】【通俗易懂l2cap 定时器rtx和ertx】
  • Go中的逃逸分析
  • 11-项目涉及设备的问题
  • 单元测试的编写
  • Java【多线程】(6)定时器
  • HCIP【OSPF 详解】
  • Spring的事务处理
  • Spring学习笔记07——SpringBoot常用注解记录
  • WEB安全--RCE--RCE的危险函数
  • Spring Boot 日志 配置 SLF4J 和 Logback
  • 在bootstrap下实现万年历
  • 分享一些新版GPT-4o使用方式!能多模态生图!
  • 【算法基础】递归与递推
  • DeepSeek学术写作过程中如何分析文献中的论证方法
  • Vue3 其它API customRef
  • 【STL】queue
  • Python 3 与 MySQL 数据库连接:mysql-connector 模块详解
  • 【王阳明代数讲义】识人用人之道与面相智慧
  • 【Java】Java核心知识点与相应面试技巧(八)——类与对象(三)
  • 湖北省利川市建设局网站/seo优化招商
  • 微网站管理平台/上海关键词优化推荐
  • 杭州最大的网站开发/哪个平台可以随便发广告
  • flash做网站的论文/b站推广链接
  • 天天联盟没网站怎么做/百度竞价排名展示方式
  • 周村网站建设/北京搜索优化推广公司