Java进阶——位运算

server/2025/4/2 5:49:53/

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

本文目录

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

一、位运算简介

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

1. 与运算

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

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

2. 或运算

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

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

异或运算

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

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

取反运算

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

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

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

左移运算

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

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

右移运算

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

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

无符号右移运算

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

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



二、位运算的实际应用

1. 权限管理

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

java">public class PermissionManager {public static final int READ_PERMISSION = 1; // 0001public static final int WRITE_PERMISSION = 2; // 0010public static final int EXECUTE_PERMISSION = 4; // 0100private 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. 交换两个变量的值

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

java">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进阶——数组超详细整理 →

http://www.ppmy.cn/server/180605.html

相关文章

图解G1垃圾回收器

概述 G1 垃圾回收器在 Java 7 update 4 后引入。它是分代、增量、并行与并发的标记 - 复制回收器&#xff0c;旨在适应内存扩大、处理器增多的情况&#xff0c;降低暂停时间&#xff0c;兼顾吞吐量。 与 CMS 相比&#xff0c;G1 有这些不同&#xff1a; 内存连续性&#xff1…

Python:爬虫概念与分类

网络请求&#xff1a; https://www.baidu.com url——统一资源定位符 请求过程&#xff1a; 客户端&#xff0c;指web浏览器向服务器发送请求 请求&#xff1a;请求网址(request url)&#xff1b;请求方法(request methods)&#xff1b;请求头(request header)&…

xtuner微调大模型教程

1.构建虚拟环境 conda create --name xtuner-env python3.10 -y conda activate xtuner-en 拉取 XTuner&#xff0c;过程大约需要几分钟 git clone https://github.com/InternLM/xtuner.git 然后安装依赖的软件&#xff0c;这步需要的时间比较长。可以百度pip的清华源进行…

基于yolo11的水稻病虫害智能分析系统

基于yolo11的水稻病虫害智能分析系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】基于YOLO模型的水稻病虫害检测与分析功能 【技术栈】 ①&#xff1a;系统环境&#xff1a;Windows/Linux/MacOS ②&#xff1a;开发环境&#xff1…

SpringBoot 配置⽂件

1.配置文件的格式 Sping Boot配置文件有以下三种 1&#xff09;application.properties 2)application.yml 3)application.yaml yml和yaml是一样的&#xff0c;都是缩写 当一个文件中properties和yml都存在的时候&#xff0c;properties的优先级更高 2.properties prop…

java倒序题变形题重温

一、题目引入 输入一个8位数&#xff0c;取其从右往左数第4到第7位&#xff0c;并生成一个新的数据输出。比如&#xff0c;输入12345678&#xff0c;输出5432。 二、代码展示 三、代码分析 int num in.nextInt();声明输入数据的数据类型 进入if判断是不是8位数 同时满足>…

数字诗意(java)

这道题是一道规律 1到10 中是不是只有3 5 6 7 9 10 满足规律&#xff0c;你说对吧 那我们来看不满足规律的有那些呢 是不是1 2 4 8 等等 你发现什么了是不是所有的2 的幂次方都不满足 只要不是2 的幂次方就都是合法的数字 ok思路有了那我们怎么来判断输入的某一个数是…

如何为图片 PDF 添加可搜索的文本层:完整指南

我经常会遇到扫描件或无文本层的 PDF 文件(即图片 PDF)。这些文件虽然外观上与普通 PDF 无异,但由于内容是以图像形式存储的,无法直接进行搜索、复制或选择。这给我们的工作带来了诸多不便。 幸运的是,通过 OCR(光学字符识别)技术,我们可以为图片 PDF 添加一个隐藏的文…