通常,程序员处理 int、float、double、String 等数据类型的变量或 Array、List、ArrayList 等集合。在某些情况下,程序员需要更深入地了解字节和位级别的数据,以提取和操作数据。 Java 和 C# 等语言允许您在位级别操作数据,这意味着您可以访问字节中的特定位。在本主题中,我们将学习 Java 中的位操作。
在进行数据压缩和数据加密时,通常需要 Java 中的位操作,程序员需要在位级别提取数据以对原始数据进行编码、解码或压缩。我们将在本文后面看到位操作的许多其他应用。
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
Java 支持 3 位移位和 4 个按位运算符来执行位级别的运算。这些运算符可用于整型(int、short、long 和 byte)以执行位级别的操作。
以下是运算符:
Operator | Description |
& | Bitwise AND |
| | Bitwise OR |
~ | Bitwise Complement |
<< | Left Shift |
>> | Right Shift |
^ | Bitwise XOR |
>>> | Unsigned Right Shift |
让我们更详细地了解一下运算符。
这是一个二元运算符,需要 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 个操作数,用符号“&”表示。按位运算符比较两个操作数的相应位。如果操作数位均为 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); } }
输出:
与我们迄今为止讨论的其他两个运算符不同,它只需要一个操作数并表示符号“~”。该运算符反转操作数的位。如果操作数位为 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 个操作数并用符号“^”表示。该运算符比较两个操作数的相应位,如果两个操作数的相应位不同,则输出 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); } }
输出:
左移按位运算符将位模式向左移动操作数中指定的一定次数。左移运算符用符号“
示例
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 << 1); System.out.println(operand << 2); System.out.println(operand << 3); } }
输出:
有符号右移运算符的工作原理与左移运算符完全相同,只是它添加了零位并移至高位。
示例
123(二进制:01111011)
第123话1 的计算结果为 61(二进制:00111101)
第123话2 的计算结果为 30(二进制:00011110)
第123话3 的计算结果为 15(二进制:00001111)
Java 程序
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); } }
输出:
右移运算符将零移动到最左边的位置,移动操作数中指定的一定位数。
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 中的位操作的详细内容。更多信息请关注PHP中文网其他相关文章!