首页 > 编程笔记 > Java笔记 阅读:14

Java位运算符的用法(附带实例,新手必看)

Java 中的位运算符用来对二进制的位进行操作,其操作数的类型是整数类型以及字符类型,运算结果是整型数据。

整型数据在内存中以二进制的形式表示,如 int 型变量 7 的二进制表示是:
00000000 00000000 00000000 00000111
其中,左边最高位是符号位,最高位是 0 表示正数,若为 1 则表示负数。负数采用补码表示,如 -8 的二进制表示为:
111111111 111111111 1111111 11111000
了解了整型数据在内存中的表示形式后,开始学习位运算符。

Java按位与运算符(&)

“按位与”运算符“&”为双目运算符,其运算法则是将参与运算的数转换成二进制数,然后低位对齐,高位不足补零,如果对应的二进制位都是 1,则结果为 1,否则结果为 0。

使用按位与运算符的示例如下:
int a = 3;       // 0000 0011
int b = 5;       // 0000 0101
int c = a & b;   // 0000 0001
按照按位与运算的计算规则,3&5 的结果是 1。

Java按位或运算符(|)

“按位或”运算符“|”为双目运算符。“按位或”运算的运算法则是将参与运算的数转换成二进制数,然后低位对齐,高位不足补零,如果对应的二进制位只要有一个为 1,则结果为 1,否则结果为 0。

使用按位或运算符的示例如下:
int a = 3;       // 0000 0011
int b = 5;       // 0000 0101
int c = a | b;   // 0000 0111
按照按位或运算的计算规则,3|5 的结果是 7。

Java按位异或运算符(^)

“按位异或”运算符“^”为双目运算符。“按位异或”运算的运算法则是将参与运算的数转换成二进制数,然后低位对齐,高位不足补零,如果对应的二进制位相同,则结果为 0,否则结果为 1。

使用按位异或运算符的示例如下:
int a = 3;       // 0000 0011
int b = 5;       // 0000 0101
int c = a ^ b;   // 0000 0110
按照按位异或运算的计算规则,3^5 的结果是 6。

Java按位取反运算符(~)

“按位取反”运算符“~”为单目运算符。“按位取反”运算的运算法则:先将参与运算的数转换成二进制数,然后把各位的 1 改为 0,0 改为 1。

使用按位取反运算符的示例如下:
int a = 3;       // 0000 0011
int b = ~a;      // 1111 1100
按照按位取反运算的计算规则,~3 的结果是 -4。

Java右移位运算符(>>)

“右移位”运算符“>>”为双目运算符。“右移位”运算的运算法则:先将参与运算的数转换成二进制数,然后所有位置的数统一向右移动对应的位数,低位移出(舍弃),高位补符号位(正数补 0,负数补 1)。

使用右移位运算符的示例如下:
int a = 3;       // 0000 0011
int b = a >> 1;  // 0000 0001
按照右移位运算的计算规则,3>>1 的结果是 1。

Java左移位运算符(<<)

“左移位”运算符“<<”为双目运算符。“左移位”运算的运算法则:先将参与运算的数转换成二进制数,然后所有位置的数统一向左移动对应的位数,高位移出(舍弃),低位的空位补0。

使用左移位运算符的示例如下:
int a = 3;       // 0000 0011
int b = a << 1;  // 0000 0110
按照左移位运算的计算规则,3<<1 的结果是 6。

Java无符号右移位运算符(>>>)

“无符号右移位”运算符“>>>”为双目运算符。“无符号右移位”运算的运算法则:先将参与运算的数转换成二进制数,然后所有位置的数统一向右移动对应的位数,低位移出(舍弃),高位补 0。

使用无符号右移位运算符的示例如下:
int a = 3;       // 0000 0011
int b = a >>> 1; // 0000 0001
按照无符号右移位运算的计算规则,3>>>1 的结果是 1。

【实例】位运算符的使用。
public class BitOperation {
    public static void main(String[] args) {
        int i = 3;
        int j = 5;
        System.out.println("i&j 的值为: " + (i&j)); // 按位与
        System.out.println("i|j 的值为: " + (i|j));  // 按位或
        System.out.println("i^j 的值为: " + (i^j));  // 按位异或
        System.out.println("~i 的值为: " + (~i));     // 按位取反
        System.out.println("i>>>1 的值为: " + (i>>>1)); // 无符号右移
        System.out.println("i<<1 的值为: " + (i<<1));  // 左移
    }
}
程序执行结果为:

i&j 的值为: 1
i|j 的值为: 7
i^j 的值为: 6
~i 的值为: -4
i>>>1 的值为: 1
i<<1 的值为: 6

相关文章