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

Java 位运算详解

位运算是一种直接在二进制位上进行操作的方式。位运算符包括按位与 (&)、按位或 (|)、按位异或 (^)、按位非 (~)、左移 (<<)、右移 (>>) 和无符号右移 (>>>)。这些操作符用于操作整型数据类型,如 intlong

一、按位与 (&)

按位与操作符对两个数字的每个二进制位执行逻辑与操作。只有当两个位都为 1 时,结果才为 1,否则为 0。

int a = 5;  // 二进制:0101
int b = 3;  // 二进制:0011
int result = a & b; // 结果为 1(0001)

二、 按位或 (|)

按位或操作符对两个数字的每个二进制位执行逻辑或操作。只要有一个位为 1,结果就为 1,否则为 0。

int a = 5;  // 二进制:0101
int b = 3;  // 二进制:0011
int result = a | b; // 结果为 7(0111)

三、按位异或 (^)

按位异或操作符对两个数字的每个二进制位执行逻辑异或操作。当两个位不同(一个为 0,一个为 1)时,结果为 1,否则为 0。

int a = 5;  // 二进制:0101
int b = 3;  // 二进制:0011
int result = a ^ b; // 结果为 6(0110)

四、按位非 (~)

按位非操作符对单个数字的每个二进制位执行逻辑非操作。将 1 变为 0,将 0 变为 1。

int a = 5;  // 二进制:0101
int result = ~a; // 结果为 -6(11111111111111111111111111111010)

五、左移 (<<)

左移操作符将数字的所有二进制位向左移动指定的位数,右边补 0。相当于乘以 2 的 n 次方。

int a = 5;  // 二进制:0101
int result = a << 2; // 结果为 20(10100)

六、右移 (>>)

右移操作符将数字的所有二进制位向右移动指定的位数,左边补符号位(即正数补 0,负数补 1)。相当于除以 2 的 n 次方。

int a = 5;  // 二进制:0101
int result = a >> 1; // 结果为 2(0010)

七、无符号右移 (>>>)

无符号右移操作符将数字的所有二进制位向右移动指定的位数,左边补 0。

int a = -5; // 二进制:11111111111111111111111111111011
int result = a >>> 1; // 结果为 2147483645(01111111111111111111111111111101)

实例

public class BitwiseOperations {public static void main(String[] args) {int a = 5;  // 二进制:0101int b = 3;  // 二进制:0011// 按位与int andResult = a & b;System.out.println("a & b = " + andResult); // 输出 1// 按位或int orResult = a | b;System.out.println("a | b = " + orResult); // 输出 7// 按位异或int xorResult = a ^ b;System.out.println("a ^ b = " + xorResult); // 输出 6// 按位非int notResult = ~a;System.out.println("~a = " + notResult); // 输出 -6// 左移int leftShiftResult = a << 2;System.out.println("a << 2 = " + leftShiftResult); // 输出 20// 右移int rightShiftResult = a >> 1;System.out.println("a >> 1 = " + rightShiftResult); // 输出 2// 无符号右移int unsignedRightShiftResult = a >>> 1;System.out.println("a >>> 1 = " + unsignedRightShiftResult); // 输出 2}
}

http://www.lryc.cn/news/388225.html

相关文章:

  • 智能体实战:开发一个集成国内AI平台的GPTs,自媒体高效智能助手
  • 完美世界|单机版合集(共22个版本)
  • Jenkins的一些记录
  • 讲讲js中的prototype和__proto__
  • JavaScript的学习之DOM的查询(一)
  • 充电宝哪个品牌比较好一点?多维度实测西圣、绿联、倍思充电宝!
  • ubuntu安装QT
  • DataGrip 2024 po for Mac 数据库管理工具解
  • 《C++ Primer》导学系列:第 13 章 - 拷贝控制
  • c++ 图论2 深度优先算法和广度优先算法
  • 【Qt】初识QtQt Creator
  • Android 11.0 修改系统显示大小导航栏消失
  • RocketMQ源码学习笔记:Producer启动流程
  • Node.js 和浏览器环境中都使用 WebSocket
  • css美化滚动条样式
  • 由浅入深,走进深度学习(补充篇:转置卷积和FCN)
  • Linux基础篇——目录结构
  • 星际编码:Swifter.Json,.NET宇宙中的数据处理新星
  • python 压缩数据
  • nacos在k8s上的集群安装实践
  • 数据结构—判断题
  • 树莓派挂载的移动硬盘badblocks坏道屏蔽,以这个为准
  • Unity开箱即用的UGUI面板的拖拽移动功能
  • 春秋云境:CVE-2022-25411[漏洞复现]
  • java基础知识点全集
  • 如何完成域名解析验证
  • 2024年6月个人工作生活总结
  • Json与Java类
  • 动手学深度学习(Pytorch版)代码实践 -计算机视觉-39实战Kaggle比赛:狗的品种识别(ImageNet Dogs)
  • 在Linux系统中挂载硬盘