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

Java进阶——位运算

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

本文目录

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

一、位运算简介

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

1. 与运算

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

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。

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。

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。

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

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

左移运算

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

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

右移运算

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

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

无符号右移运算

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

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



二、位运算的实际应用

1. 权限管理

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

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. 交换两个变量的值

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

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

相关文章:

Java进阶——位运算

位运算直接操作二进制位&#xff0c;在处理底层数据、加密算法、图像处理等领域具有高效性能和效率。本文将深入探讨Java中的位运算。 本文目录 一、位运算简介1. 与运算2. 或运算异或运算取反运算左移运算右移运算无符号右移运算 二、位运算的实际应用1. 权限管理2. 交换两个变…...

golang strings包常用方法

方法名称功能描述示例strings.Join将字符串切片中的元素连接成一个字符串&#xff0c;使用指定的分隔符。strings.Join([]string{"hello", "world"}, " ")strings.HasPrefix检查字符串是否以指定的前缀开头。strings.HasPrefix("hello"…...

网络安全之前端学习(css篇2)

那么今天我们继续来学习css&#xff0c;预计这一章跟完后&#xff0c;下一章就是终章。然后就会开始js的学习。那么话不多说&#xff0c;我们开始吧。 字体属性 之前讲到了css可以改变字体属性&#xff0c;那么这里来详细讲一讲。 1.1字体颜色 之前讲到了对于字体改变颜色食…...

PS底纹教程

1.ctrlshiftU 去色 2.新建纯色层 颜色中性灰&#xff1b;转换为智能对象 3.纯色层打开滤镜&#xff08;滤镜库&#xff09;&#xff1b; 素描下找到半调图案&#xff0c;数值调成大小5对比1&#xff1b; 再新建一层&#xff0c;素描下找到撕边&#xff0c;对比拉到1&#x…...

NX/UG二次开发—CAM获取加工操作的最低Z深度值的方法

网上已经有些大佬给出了解决方案&#xff0c;但是基本有两种&#xff0c;一种内部函数&#xff0c;另外一种就是导出程序的刀轨文件找坐标计算。使用内部函数进行操作&#xff0c;可以自己学习&#xff0c;不做解释。下面只是针对第二种进行说明&#xff0c;参考胡君老师的教程…...

解决pyinstaller GUI打包时无法打包图片问题

当我们的python GuI在开发时。经常会用到图片作为背景&#xff0c;但是在打包后再启动GUI后却发现&#xff1a;原先调试时好端端的背景图片竟然不翼而飞或者直接报错。这说明图片没有被pyinstaller一起打包…… 要解决这个问题很简单&#xff0c;就是更改图片的存储方式。 tk…...

蓝桥杯真题------R格式(高精度乘法,高精度加法)

对于高精度乘法和加法的同学可以学学这几个题 高精度乘法 高精度加法 文章目录 题意分析部分解全解 后言 题意 给出一个整数和一个浮点数&#xff0c;求2的整数次幂和这个浮点数相乘的结果最后四舍五入。、 分析 我们可以发现&#xff0c;n的范围是1000,2的1000次方非常大&am…...

Nginx — Nginx安装证书模块(配置HTTPS和TCPS)

一、安装和编译证书模块 [rootmaster nginx]# wget https://nginx.org/download/nginx-1.25.3.tar.gz [rootmaster nginx]# tar -zxvf nginx-1.25.3.tar.gz [rootmaster nginx]# cd nginx-1.25.3 [rootmaster nginx]# ./configure --prefix/usr/local/nginx --with-http_stub_…...

回调后门基础

回调后门概述 回调后门&#xff08;Reverse Shell&#xff09;是一种常见的攻击方式&#xff0c;攻击者通过受害主机主动连接到远程服务器&#xff08;攻击者控制的机器&#xff09;&#xff0c;从而获得远程控制权限。 工作原理 受害者主机 运行一个恶意代码&#xff0c;尝…...

深度学习 Deep Learning 第13章 线性因子模型

深度学习 Deep Learning 第13章 线性因子模型 内容概要 本章深入探讨了线性因子模型&#xff0c;这是一类基于潜在变量的概率模型&#xff0c;用于描述数据的生成过程。这些模型通过简单的线性解码器和噪声项捕捉数据的复杂结构&#xff0c;广泛应用于信号分离、特征提取和数…...

【个人笔记】用户注册登录思路及实现 springboot+mybatis+redis

基本思路 获取验证码接口 验证码操作用了com.pig4cloud.plugin的captcha-core这个库。 AccountControl的"/checkCode"接口代码&#xff0c;通过ArithmeticCaptcha生成一张验证码图片&#xff0c;通过text()函数得到验证码的答案保存到变量code&#xff0c;然后把图…...

华为OD机试2025A卷 - 正则表达式替换(Java Python JS C++ C )

最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 题目描述 为了便于业务互交,约定一个对输入的字符串中的下划线做统一替换。 具体要求如下: 输入字符串,将其中包含的每一个下划线“_”,使用特殊字符串(^|$|[,+])替换,并输出替换后的结果…...

WPS宏开发手册——Excel常用Api

目录 系列文章4、Excel常用Api4.1、判断是否是目标工作excel4.2、获取源工作表和目标工作表的引用4.3、获取单元格的值4.4、设置单元格的值4.5、合并单元格4.6、获取源范围4.7、获取源范围行数4.8、通过源来获取单元格的值4.9、设置单元格的背景颜色4.10、设置单元格的文字颜色…...

数据库基础入门

关系型数据库 vs. 非关系型数据库SQL 基础 & ORM 框架使用一、数据库概述 数据库(Database)是 存储和管理数据 的系统,主要分为 关系型数据库(Relational Database) 和 非关系型数据库(NoSQL)。 📌 数据库的作用: ✅ 存储:持久化数据,避免数据丢失。 ✅ 管理…...

聚类(Clustering)基础知识3

文章目录 一、聚类的性能评价1、聚类性能评价&#xff08;1&#xff09;聚类性能评价方法&#xff1a; 2、参考模型 (reference model)&#xff08;1&#xff09;数据集&#xff1a;&#xff08;2&#xff09;聚类结果&#xff1a;&#xff08;3&#xff09;参考模型&#xff1…...

RK3588使用笔记:设置程序/服务开机自启

一、前言 一般将系统用作嵌入式设备时肯定要布置某些程序&#xff0c;这时候就需要对程序设置开机自己&#xff0c;否则每次都要人为启动&#xff0c;当有些嵌入式系统未连接显示屏或者无桌面环境去操作启动程序时&#xff0c;程序自启就是必须的了&#xff0c;本文介绍在纯li…...

Python-数据处理

第十五章 生成数据 安装Matplotlib&#xff1a;通过pip install matplotlib命令安装库。绘制折线图的核心语法为&#xff1a; import matplotlib.pyplot as plt x_values [1, 2, 3] y_values [1, 4, 9] plt.plot(x_values, y_values, linewidth2) plt.title(&quo…...

LoRA技术全解析:如何用4%参数量实现大模型高效微调

引言 在当今的人工智能领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;已经成为革命性的技术。然而&#xff0c;这些模型通常拥有数十亿个参数&#xff0c;全量微调成本极高。本文将为初级开发者详细讲解LoRA&#xff08;Low-Rank Adaptation&#xff09;技术&#…...

职测-言语理解与表达

成语填空 成语的误用 误用①&#xff1a;望文生义【按成语的字面意思去理解&#xff0c;导致误用】 成语解释如数家珍对列举的事物或叙述的故事十分熟悉&#xff0c;但熟悉的对象不能是自己收藏的宝贝目无全牛比喻技术熟练到得心应手的境地登堂入室比喻学问或技艺由浅入深&a…...

深度学习处理文本(2)

建立词表索引 将文本拆分成词元之后&#xff0c;你需要将每个词元编码为数值表示。你可以用无状态的方式来执行此操作&#xff0c;比如将每个词元哈希编码为一个固定的二进制向量&#xff0c;但在实践中&#xff0c;你需要建立训练数据中所有单词&#xff08;​“词表”​&…...

python实现股票数据可视化

最近在做一个涉及到股票数据清洗及预测的项目&#xff0c;项目中需要用到可视化股票数据这一功能&#xff0c;这里我与大家分享一下股票数据可视化的一些基本方法。 股票数据获取 目前&#xff0c;我已知的使用python来获取股票数据方式有以下三种: 爬虫获取&#xff0c;实现…...

JavaScript DOM与元素操作

目录 DOM 树、DOM 对象、元素操作 一、DOM 树与 DOM 对象 二、获取 DOM 元素 1. 基础方法 2. 现代方法&#xff08;ES6&#xff09; 三、修改元素内容 四、修改元素常见属性 1. 标准属性 2. 通用方法 五、通过 style 修改样式 六、通过类名修改样式 1. className 属…...

ARM向量表

向量表作用说明RVBAR在 AArch64 中&#xff0c;重置向量不再是异常向量表的一部分。 有复位向量的专用配置输入引脚和寄存器。在 AArch64 中&#xff0c;处理器从 IMPLEMENTAION‑DEFINED 地址开始执行&#xff0c; 该地址由硬件输入引 脚RVBARADDR定义&#xff0c; 可以通过 R…...

leetcode刷题日记——除自身以外数组的乘积

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 题目要求获取数组中每个元素除自己以外的各元素的乘积最简单的方法就是算出数组所有元素的乘积&#xff0c;然后除以自身&#xff0c;即可得到除自身外各元素的乘积 但要考虑到其自身为0的情况&#xff0c;即当期自身为0时&am…...

【信奥一本通提高篇】基础算法之贪心算法

原文 https://bbs.fmcraft.top/blog/index.php/archives/22/ 贪心算法 概述 近年来的信息学竞赛试题&#xff0c;经常出现求一个问题的可行解或最优解的题目。这类问题就是我们通常所说的最优化问题。贪心算法是求解这类问题的一种常用算法。在众多的算法中&#xff0c;贪心…...

PyQt6实例_批量下载pdf工具_批量pdf网址获取

目录 前置&#xff1a; 步骤&#xff1a; step one 安装包 step two 获取股票代码 step three 敲代码&#xff0c;实现 step four 网址转pdf网址 视频 前置&#xff1a; 1 本系列将以 “PyQt6实例_批量下载pdf工具”开头&#xff0c;放在 【PyQt6实例】 专栏 2 本节讲…...

KMeans算法案例

KMeans算法案例 案例介绍 已知&#xff1a;客户性别、年龄、年收入、消费指数 需求&#xff1a;对客户进行分析&#xff0c;找到业务突破口&#xff0c;寻找黄金客户 数据集共包含顾客的数据, 数据共有 4 个特征, 数据共有 200 条。接下来&#xff0c;使用聚类算法对具有相似…...

IDApro直接 debug STM32 MCU

使用IDA pro 逆向分析muc 固件的时候&#xff0c; 难免要进行一些动态的debug&#xff0c;来进一步搞清楚一些内存的数据、算法等&#xff0c;这时候使用远程debug 的方式直接在mcu上进行debug 最合适不过了。 不过有个前提条件就是一般来说有的mcu 会被运行中的代码屏蔽 RDP、…...

六十天前端强化训练之第三十六天之E2E测试(Cypress)大师级完整指南

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、知识讲解 1. E2E测试核心概念 2. Cypress框架特性 3. 工作原理 4. 测试金字塔定位 二、核心代码示例&#xff1a;用户登录全流程测试 三、实现效果展示 四、学习要…...

创建和管理Pod

创建和管理Pod 文章目录 创建和管理Pod[toc]一、什么是Pod1.Pod 的核心定义2.Pod 的组成与结构3.Pod 的生命周期4.Pod 的使用场景5.高级特性 二、Pod与容器1. 为什么使用 Pod 作为 Kubernetes 的最小部署单元&#xff1f;2. 单一容器 Pod3. 多容器 Pod4. 初始化容器&#xff08…...