【Java探索之旅】运算符解密 位运算,移位运算

个人头像
🎥 屿小夏 : 个人主页
🔥个人专栏 : Java入门到精通
🌄 莫道桑榆晚,为霞尚满天!

文章目录

  • 📑前言
  • 一、位运算符
    • 1.1 按位与 &
    • 1.2 按位或 |
    • 1.3 按位取反 ~
    • 1.4 按位异或^
  • 二、移位运算符
    • 1.1 左移<<
    • 1.2 右移>>
    • 1.3 无符号右移>>>
  • 🌤️全篇总结

📑前言

位运算符是Java中的重要运算符之一,用于对数据的二进制位进行操作。Java中的位运算符包括按位与(&)、按位或(|)、按位取反(~)和按位异或(^)。这些运算符可以帮助我们进行位级操作,对于某些特定的问题解决方案非常有用。本文将深入探讨Java中的位运算符的用法、规则以及注意事项,帮助读者更好地理解和应用这些运算符。

一、位运算符

java 中数据存储的最小单位是字节,而数据操作的最小单位是比特位. 字节是最小的存储单位,每个字节是由8个二进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。

位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。

位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位的每一位依次进行计算。

1.1 按位与 &

按位与运算符(&)会对两个整数的每一位进行比较。只有当两个相应的位都是1时,结果中的该位才会是1,否则为0。这个操作常用于屏蔽某些位或检查特定位是否设置。

int a = 10;
int b = 20;
System.out.println(a & b);

进行按位运算, 需要先把 10 和 20 转成二进制, 分别为 1010 和 10100

在这里插入图片描述

1.2 按位或 |

如果两个二进制位都是 0, 则结果为 0, 否则结果为 1

int a = 10;
int b = 20;
System.out.println(a | b);

运算方式和按位于类似

在这里插入图片描述

注意:

当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算。

1.3 按位取反 ~

如果该二进制位为 0 则转为 1, 如果该二进制位为 1 则转为 0

int a = 0xf;
System.out.printf("%x\n", ~a)
//fffffff0

注意:

  • 0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应4个二进制位
  • 0xf 表示 10 进制的 15, 也就是二进制的 1111
  • printf 能够格式化输出内容, %x 表示按照十六进制输出
  • \n 表示换行符

1.4 按位异或^

按位异或运算符(^)会对两个整数的每一位进行比较。如果两个相应的位相同(都是0或都是1),则结果中的该位为0;如果两个位不同,则结果为1。

int a = 0x1;
int b = 0x2;
System.out.printf("%x\n", a ^ b);

注意:如果两个数相同,则异或的结果为0

二、移位运算符

移位运算符有三个: << >> >>> ,都是二元运算符,且都是按照二进制比特位来运算的。

1.1 左移<<

最左侧位不要了, 最右侧补 0

int a = 0x10;
System.out.printf("%x\n", a << 1);
// 运行结果(注意, 是按十六进制打印的)
20

注意:向左移位时,丢弃的是符号位,因此正数左移可能会变成负数

1.2 右移>>

最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

int a = 0x10;
System.out.printf("%x\n", a >> 1);
// 运行结果(注意, 是按十六进制打印的)
8 in
t b = 0xffff0000;
System.out.printf("%x\n", b >> 1);
// 运行结果(注意, 是按十六进制打印的)
ffff8000

1.3 无符号右移>>>

最右侧位不要了, 最左侧补 0

int a = 0xffffffff;
System.out.printf("%x\n", a >>> 1);
// 运行结果(注意, 是按十六进制打印的)
7fffffff

注意:

  1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
  2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
  3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
  4. 移动负数位或者移位位数过大都没有意义

🌤️全篇总结

本篇详细介绍了Java中的位运算符。位运算符包括按位与(&)、按位或(|)、按位取反(~)和按位异或(^),它们用于对数据的二进制位进行操作。通过位运算符,我们可以进行屏蔽位、检查位状态等处理,频繁出现在底层编程、位运算加密等场景中。在使用这些运算符时,需要理解它们的运算规则,注意正负数的影响以及运算符的优先级。通过合理运用这些运算符,能够提高代码的效率和性能,同时也解决一些特定问题。

在这里插入图片描述

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

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

相关文章

分布式事务基础理论解析

一、概述 1.1 定义 为了解决java 多个节点之间数据一致性问题。产生的核心原因是&#xff1a;资源存储的分布性。比如多个数据库&#xff0c;或者Mysql和Redis的数据一致性等。 1.2 产生场景 跨JVM进程产生分布式事务。即服务A和服务B分别有对应的数据库跨数据库实例产生分…

Linux-centos如何搭建yum源仓库

1.本地搭建&#xff08;无需连接外网&#xff09; 1.1检查网络配置&#xff0c;及网络连接 打开虚拟机&#xff0c;点击【编辑——虚拟网络编辑器】 点击【仅主机模式】查看子网段是否和局内IP匹配 进入局内&#xff0c;查看网络IP是否在你上述设置的网段内&#xff0c;如果不…

开源项目免费接口:观点抽取让数据分析更简单

一、开源项目介绍 一款多模态AI能力引擎&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大&#xff0c;支持本地化部署&#xff0c;并鼓励用户体验和开发者共同完善&#xf…

vxe-table表格组件的使用已经query函数扩展

最近新项目使用vue3typescript开发后台管理系统&#xff0c;基本上展示内容一致表格的方式展示&#xff0c;所以使用vxe-table组件来开发&#xff0c;主要是为了方便使用工具栏&#xff0c;以及其他表格操作。 vxe-table 开发文档&#xff1a;https://vxetable.cn/#/table/sta…

Vue使用pandoc-wasm进行各格式转换

前端使用pandoc-wasm的问题和建议 docx转md npm install --save pandoc-wasmimport { Pandoc } from "pandoc-wasm";const pandoc new Pandoc()pandoc.init().then(async (pandoc) > {const result await pandoc.run({text: "Some input text",opti…

掌握C#: 从基础到精通 - 中级实战练习集

文章目录 异常处理尝试-捕获结构 文件 I/O 练习追加而不覆盖处理目录 LINQ 查询练习筛选集合中的对象排序复杂对象 类与对象练习继承与多态性 你是否已经掌握了C#的基础知识&#xff0c;正在寻找更多挑战来提升你的能力&#xff1f;那么&#xff0c;这篇文章就是为你准备的。我…

代码随想录 -- 回溯算法

文章目录 回溯算法理论什么是回溯法回溯法的效率回溯法解决的问题理解回溯法回溯法模板 组合问题I描述题解优化 组合总和III描述题解 电话号码的字母组合描述题解 组合总和描述题解 组合总和II描述题解 分割回文串描述题解 复原IP地址描述题解 子集描述题解 子集II描述题解 递增…

暄桐林曦老师的三个“知行”心得,帮你少走弯路

暄桐是一间传统美学教育教室&#xff0c;创办于2011年&#xff0c;林曦是创办人和授课老师&#xff0c;教授以书法为主的传统文化和技艺&#xff0c;皆在以书法为起点&#xff0c;亲近中国传统之美&#xff0c;以实践和所得&#xff0c;滋养当下生活。    “知行合一”四个…

20双体系Java学习之数组的toString类

Arrays.toString ★小贴士 数组内容字符串表示形式由数组的元素列表组成&#xff0c;括在方括号&#xff08;"[]"&#xff09;中。相邻元素用字符 ", "&#xff08;逗号加空格&#xff09;分隔。 使用toString()方法可方便地输出数组的内容&#xff0c;避免…

【计算机基础系列】位运算

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【解决】Github Pages搭建的网页访问加载缓慢

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 文章目录 一、CDN技术简介二、基于Cloudflare平台使用CDN服务&#xff08;一&#xff09;添加网站&#xff08;二&#xff09…

@RestController和@Controller的区别

Retention注解的生命周期 Target表示注解的使用范围 Type&#xff1a;类型 1、RestControllerControllerResponseBody Controller:告诉Spring帮我们管理哪些程序 ResponseBody&#xff1a;返回数据&#xff0c;即可以修饰类&#xff0c;又可以修饰方法&#xff1a; &…