首页 >Java >java教程 >Java 中的位操作

Java 中的位操作

王林
王林原创
2024-08-30 15:59:40909浏览

通常,程序员处理 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);
}
}

输出:

Java 中的位操作

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);
}
}

输出:

Java 中的位操作

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);
}
}

输出:

Java 中的位操作

注意:当您运行 Java 程序时,您将得到 -16 作为输出,而不是 240,因为编译器显示该数字的 2 补码,即二进制数的负数。
任何数的 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);
}
}

输出:

Java 中的位操作

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 << 1);
System.out.println(operand << 2);
System.out.println(operand << 3);
}
}

输出:

Java 中的位操作

6.带符号右移

有符号右移运算符的工作原理与左移运算符完全相同,只是它添加了零位并移至高位。

示例

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 中的位操作

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 程序解释各个运算符。

以上是Java 中的位操作的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn