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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI深夜直播「偷袭」谷歌!GPT-4o原生图像生成:奥特曼带梗图,AGI战场再燃战火

引言&#xff1a;AI战场的「闪电战」 当谷歌刚刚发布「地表最强」Gemini 2.5 Pro时&#xff0c;OpenAI立即以一场深夜直播「闪电反击」——GPT-4o的原生图像生成功能正式上线&#xff01;从自拍变梗图到相对论漫画&#xff0c;奥特曼&#xff08;OpenAI团队&#xff09;用一连…

鸿蒙harmonyOS:笔记 正则表达式

从给出的文本中&#xff0c;按照既定的相关规则&#xff0c;匹配出符合的数据&#xff0c;其中的规则就是正则表达式&#xff0c;使用正则表达式&#xff0c;可以使得我们用简洁的代码就能实现一定复杂的逻辑&#xff0c;比如判断一个邮箱账号是否符合正常的邮箱账号&#xff0…

[首发]烽火HG680-KD-海思MV320芯片-2+8G-安卓9.0-强刷卡刷固件包

烽火HG680-KD-海思MV320芯片-28G-安卓9.0-强刷卡刷固件包 U盘强刷刷机步骤&#xff1a; 1、强刷刷机&#xff0c;用一个usb2.0的8G以下U盘&#xff0c;fat32&#xff0c;2048块单分区格式化&#xff08;强刷对&#xff35;盘非常非常挑剔&#xff0c;usb2.0的4G U盘兼容的多&a…

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…

Java基础-23-静态变量与静态方法的使用场景

在Java中&#xff0c;static关键字用于定义静态变量和静态方法。它们属于类本身&#xff0c;而不是类的某个实例。因此&#xff0c;静态成员可以通过类名直接访问&#xff0c;而无需创建对象。以下是静态变量与静态方法的常见使用场景&#xff1a; 一、静态变量的使用场景 静态…

大模型架构记录12【Agent实例-tool】

运行根目录下几个ipynb文件- Learn-Agent.ipynb- 学习《Custom agent 自定义代理》部分- v1-Create-Custom-Agent.ipynb- v2-Create-Custom-Agent.ipynb- 基于v1&#xff0c;新增一些职位描述&#xff08;JD&#xff09;信息- v3-Create-Custom-Agent.ipynb- 基于v2&#xff0c…

在MCU工程中优化CPU工作效率的几种方法

在嵌入式系统开发中&#xff0c;优化 CPU 工作效率对于提升系统性能、降低功耗、提高实时性至关重要。Keil 作为主流的嵌入式开发工具&#xff0c;提供了多种优化策略&#xff0c;包括 关键字使用、内存管理、字节对齐、算法优化 等。本文将从多个方面介绍如何在 Keil 工程中优…

Linux系统下C语言fork函数使用案例

一、fork函数的作用 生成一个子进程&#xff0c;异步执行某个任务&#xff1b; 二、子进程的作用 1、子进程能复制一份父进程的变量、函数&#xff1b; 2、子进程可以和父进程同时并发执行&#xff1b; 函数语法&#xff1a; pid_t fork() 说明&#xff1a;调用后返回一个进程…

MySQL中的CREATE TABLE LIKE和CREATE TABLE SELECT

MySQL中的CREATE TABLE LIKE和CREATE TABLE SELECT CREATE TABLE LIKECREATE TABLE SELECT CREATE TABLE LIKE CREATE TABLE ... LIKE可以用来复制表结构&#xff0c;源表上的索引和约束也会复制。CREATE TABLE ... LIKE不能复制表数据。CREATE TABLE ... LIKE只能复制基表&…

Java开发者指南:深入理解HotStuff新型共识算法

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、全栈领域优质创作者、高级开发工程师、高级信息系统项目管理师、系统架构师&#xff0c;数学与应用数学专业&#xff0c;10年以上多种混合语言开发经验&#xff0c;从事DICOM医学影像开发领域多年&#xff0c;熟悉DICOM协议及…

opencv图像处理之指纹验证

一、简介 在当今数字化时代&#xff0c;生物识别技术作为一种安全、便捷的身份验证方式&#xff0c;正广泛应用于各个领域。指纹识别作为生物识别技术中的佼佼者&#xff0c;因其独特性和稳定性&#xff0c;成为了众多应用场景的首选。今天&#xff0c;我们就来深入探讨如何利…

wfs.js之h264转码mp4分析

准备源文件 下载源文件 git clone https://github.com/ChihChengYang/wfs.js.git编译后得到wfs.js这个文件 调用 在demo/index.html中&#xff0c;前端对wfs.js进行了调用 var video1 document.getElementById("video1"), wfs new Wfs(); wfs.attachMedia…

协程 Coroutine

协程是 C20 引入的新特性。 文章目录 基本概念std::coroutine_handlepromise 类型co_yield 基本用法 优势异步 TCPco_await 基本概念 协程&#xff08;Coroutine&#xff09;是一种比线程更加轻量级的并发编程模型。协程的调度由程序员手动控制。 异步不是并行&#xff0c;但…

uniapp中的流式输出

一、完整代码展示 目前大多数的ai对话都是流式输出&#xff0c;也就是对话是一个字或者多个字逐一进行显示的下面是一个完整的流式显示程序&#xff0c;包含的用户的消息发出和ai的消息回复 <template><view class"chat-container"><view class&quo…

洛谷题单1-P5703 【深基2.例5】苹果采购-python-流程图重构

题目描述 现在需要采购一些苹果&#xff0c;每名同学都可以分到固定数量的苹果&#xff0c;并且已经知道了同学的数量&#xff0c;请问需要采购多少个苹果&#xff1f; 输入格式 输入两个不超过 1 0 9 10^9 109 正整数&#xff0c;分别表示每人分到的数量和同学的人数。 输…

JS 手撕题高频考点

前端面试中&#xff0c;JS 手撕题是高频考点&#xff0c;主要考察 编程能力、算法思维、JS 核心知识。以下是最常见的手撕题分类 代码示例&#xff1a; 目录 &#x1f4cc; 1. 手写函数柯里化&#x1f4cc; 2. 手写 debounce&#xff08;防抖&#xff09;&#x1f4cc; 3. 手写…

【STM32】知识点介绍一:硬件知识

文章目录 一、电源引脚简介二、电平信号三、电路分析 一、电源引脚简介 VCC、GND、VDD和VSS是电子电路中常见的术语&#xff0c;代表着不同的电源引脚或电压。 VCC&#xff08;Voltage at the Common Collector&#xff09;&#xff1a;VCC是指集电极&#xff08;Collector&am…

3. 列表元素替换

【问题描述】给定一个列表&#xff0c;将列表中所有的偶数替换为0 【输入形式】输入一行&#xff0c;包含若干个整数&#xff0c;用空格分隔 【输出形式】输出替换后的列表&#xff0c;每个元素用空格分隔 【样例输入】1 2 3 4 5 6 7 8 9 10 【样例输出】1 0 3 0 5 0 7 0 9…

问题的根源还是解题的方案

周末的早上照例是要早醒 debug 代码的&#xff0c;仿佛又回到了 2014 年… 古人几天甚至几个月不洗澡&#xff0c;不会臭吗&#xff1f;有没有可能古人没有化纤类衣服&#xff0c;且古人的纯天然生活环境其身体菌群和现代人不同&#xff0c;古人就像健康的野生动物一样即使不洗…

虚拟机安装linux系统无法上网的解决方法

在虚拟环境中运行Linux系统时&#xff0c;有时会遇到网络连接问题&#xff0c;特别是在使用虚拟机软件如VMware或VirtualBox时。本文将详细介绍一种针对“虚拟机安装Linux系统无法上网”问题的解决方案&#xff0c;以CentOS 6.5为例&#xff0c;适用于其他基于NAT模式的虚拟机环…