通常,程序员处理 int、float、double、String 等数据类型的变量或 Array、List、ArrayList 等集合。在某些情况下,程序员需要更深入地了解字节和位级别的数据,以提取和操作数据。 Java 和 C# 等语言允许您在位级别操作数据,这意味着您可以访问字节中的特定位。在本主题中,我们将学习 Java 中的位操作。
在进行数据压缩和数据加密时,通常需要 Java 中的位操作,程序员需要在位级别提取数据以对原始数据进行编码、解码或压缩。我们将在本文后面看到位操作的许多其他应用。
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
Java 支持 3 位移位和 4 个按位运算符来执行位级别的运算。这些运算符可用于整型(int、short、long 和 byte)以执行位级别的操作。
Java 按位和位移运算符
以下是运算符:
Operator | Description |
& | Bitwise AND |
| | Bitwise OR |
~ | Bitwise Complement |
Left Shift | |
>> | Right Shift |
^ | Bitwise XOR |
>>> | Unsigned Right Shift |
Java 中的位操作运算符
让我们更详细地了解一下运算符。
1.按位或
这是一个二元运算符,需要 2 个操作数,用符号“|”表示”。按位运算符比较两个操作数的相应位。如果操作数任意一位为 1,则输出为 1;如果没有,则为 0。
示例
15 = 00001111(二进制)
27 = 00011011(二进制)
15 和 27 的按位或运算
00001111
| 00011011
___
00011111 = 31(十进制)
Java 程序
public class BitwiseOR { public static void main(String[] args) { int operand1 = 15, operand2 = 27, output = operand1 | operand2; System.out.println(output); } }
输出:
2.按位与
这也是一个按位运算符,它需要 2 个操作数,用符号“&”表示。按位运算符比较两个操作数的相应位。如果操作数位均为 1,则输出为 1;否则,0。
示例
15 = 00001111(二进制)
27 = 00011011(二进制)
15 和 27 的按位与运算
00001111
| 00011011
___
00001011 = 11(十进制)
Java 程序
public class BitwiseAND { public static void main(String[] args) { int operand1 = 15, operand2 = 27, output = operand1 & operand2; System.out.println(output); } }
输出:
3.按位补
与我们迄今为止讨论的其他两个运算符不同,它只需要一个操作数并表示符号“~”。该运算符反转操作数的位。如果操作数位为 0,则将其转换为 1,反之亦然。
示例
15 = 00001111(二进制)
15的按位补运算
~ 00001111
___
11110000 = 240(十进制)
Java 程序
public class BitwiseComplement { public static void main(String[] args) { int operand= 15, output; output= ~operand; System.out.println(output); } }
输出:
任何数的 2 补码等价于 -(n+1),其中 n 是要计算 2 补码的数。在我们的例子中,操作数 15 的 2 补码是 -16,这是程序的输出。
4.按位异或
按位异或是一个二元运算符,它需要 2 个操作数并用符号“^”表示。该运算符比较两个操作数的相应位,如果两个操作数的相应位不同,则输出 1,否则输出 0。
按位异或运算符相当于(按位或 + 按位补)
示例
15 = 00001111(二进制)
27 = 00011011(二进制)
15 和 27 的按位异或运算
00001111
^ 00011011
___
00010100 = 20(十进制)
Java 程序
public class BitwiseXor { public static void main(String[] args) { int operand1= 15, operand2 = 27, output; output = operand1 ^ operand2; System.out.println(output); } }
输出:
5.带符号左移
左移按位运算符将位模式向左移动操作数中指定的一定次数。左移运算符用符号“
示例
123(二进制:01111011)
第123章1 的计算结果为 246(二进制:011110110)
第123章2 的计算结果为 492(二进制:0111101100)
第123章3 的计算结果为 984(二进制:01111011000)
Java 程序
public class LeftShiftOperator { public static void main(String[] args) { int operand = 123; System.out.println(operand <p><strong>输出:<br> </strong></p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/172500478993864.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Java 中的位操作" ></p> <h4 id="带符号右移">6.带符号右移</h4> <p>有符号右移运算符的工作原理与左移运算符完全相同,只是它添加了零位并移至高位。</p> <p><strong>示例</strong></p> <p>123(二进制:01111011)<br> 第123话1 的计算结果为 61(二进制:00111101)<br> 第123话2 的计算结果为 30(二进制:00011110)<br> 第123话3 的计算结果为 15(二进制:00001111)</p> <p><strong>Java 程序</strong></p> <pre class="brush:php;toolbar:false">public class RightShiftOperator { public static void main(String[] args) { int operand = 123; System.out.println(operand >> 1); System.out.println(operand >> 2); System.out.println(operand >> 3); } }
输出:
7.无符号右移
右移运算符将零移动到最左边的位置,移动操作数中指定的一定位数。
Java 程序
public class UnSignedRightShiftOperator { public static void main(String[] args) { int operand = 123; System.out.println(operand >>> 1); System.out.println(operand >>> 2); System.out.println(operand >>> 3); } }
输出:
结论 – Java 中的位操作
现在我们已经到了文章的结尾,让我们总结一下我们在本文中讨论的要点。我们已经了解了什么是位操作及其不同的用例。我们还学习了不同类型的按位运算符(按位与、按位或、按位补和按位异或)和位移运算符(有符号左移运算符、有符号右移运算符和无符号右移运算符)以及示例和样本Java 程序解释各个运算符。
以上是Java 中的位操作的详细内容。更多信息请关注PHP中文网其他相关文章!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

记事本++7.3.1
好用且免费的代码编辑器