java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java左移、右移操作

一文让你彻底学会Java左移、右移操作

作者:凭君语未可

这篇文章主要介绍了了Java中的位运算符,包括左移(<<)、右移(>>)和无符号右移(>>>),左移将数字的二进制位向左移动,相当于乘以2的n次方;右移将数字的二进制位向右移动,保留符号位,相当于除以2的n次方,文中介绍的非常详细,需要的朋友可以参考下

在Java中,左移 ( <<) 和右移 ( >>) 是位运算符,用于对二进制数进行移位操作。移位操作会对数字的位模式进行直接操作。

1. 左移运算符(<<)

功能:

语法:

result = value << n;

特点:

示例:

int a = 5; // 二进制:00000000 00000000 00000000 00000101
int result = a << 2; // 左移2位:00000000 00000000 00000000 00010100(20)
System.out.println(result); // 输出:20

2. 右移运算符(>>)

功能:

语法:

result = value >> n;

特点:

示例:

int a = 20; // 二进制:00000000 00000000 00000000 00010100
int result = a >> 2; // 右移2位:00000000 00000000 00000000 00000101(5)
System.out.println(result); // 输出:5

int b = -20; // 二进制:11111111 11111111 11111111 11101100(补码表示)
int result2 = b >> 2; // 右移2位:11111111 11111111 11111111 11111011(-5)
System.out.println(result2); // 输出:-5

3. 无符号右移运算符(>>>)

除了 >>,Java 还提供了 无符号右移运算符 >>>

示例:

int a = -20; // 二进制:11111111 11111111 11111111 11101100(补码表示)
int result = a >>> 2; // 无符号右移2位:00111111 11111111 11111111 11111011
System.out.println(result); // 输出:1073741819

总结

操作符名称功能
<<左移二进制向左移,右边补0,相当于乘以2的n次方(如果不溢出)。
>>符号右移二进制向右移,保留符号位,高位补符号位(正数补0,负数补1),相当于除以2的n次方。
>>>无符号右移二进制向右移,高位总是补0,不考虑符号位。

扩展:i <<= j

运算过程

示例

示例1:对正数进行左移

public class Main {
    public static void main(String[] args) {
        int i = 5; // 二进制:00000000 00000000 00000000 00000101
        int j = 2;

        i <<= j; // 等价于 i = i << j
        // 左移2位:00000000 00000000 00000000 00010100 (20)

        System.out.println(i); // 输出:20
    }
}

示例2:对负数进行左移

public class Main {
    public static void main(String[] args) {
        int i = -5; // 二进制(补码):11111111 11111111 11111111 11111011
        int j = 2;

        i <<= j; // 等价于 i = i << j
        // 左移2位:11111111 11111111 11111111 11101100 (-20)

        System.out.println(i); // 输出:-20
    }
}

示例3:可能的溢出问题

public class Main {
    public static void main(String[] args) {
        int i = 1073741824; // 二进制:01000000 00000000 00000000 00000000
        int j = 1;

        i <<= j; // 左移1位:10000000 00000000 00000000 00000000
        // 超过32位,结果变为负数(溢出)
        
        System.out.println(i); // 输出:-2147483648
    }
}

注意点

总结 

到此这篇关于Java左移、右移操作的文章就介绍到这了,更多相关Java左移、右移操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文