Java 位移操作符

1 左移运算符

左移位运算符为 << ,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

例如,将整数 11 向左位移 1 位的过程如下图所示。

从上图可以看到,原来数的所有二进制位都向左移动 1 位。原来位于左边的最高位 0 被移出舍弃,再向尾部追加 0 补位。最终到的结果是 22,相当于原来数的 2 倍。

2 右移运算符

右位移运算符为 >> ,其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。

例如,将整数 11 向右位移 1 位的过程如下图所示。

从上图可以看到,原来数的所有二进制位都向右移动 1 位。原来位于右边的最低位 1 被移出舍弃,再向最高位追加 0 补位。最终到的结果是 5,相当于原数整除 2 的结果。

3 无符号右移运算符

无符号右移运算符和右移运算符是一样的,不过无符号右移运算符在右移的时候是补0的,而右移运算符是补符号位的。

以下是 -12345 二进制表达式


在右移运算符中,右移后补0,是由于正数 12345 符号位为0 ,如果为1 则应补1

4 >>和>>>运算符之间的区别

>> 和 >>> 都用于向右位移。区别在于 >> 保留符号位,而运算>>则不保留符号位。要保留符号位,您需要在MSB(最高有效位)中添加0。

5 位移的简单代码示例

package com.yiidian;

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class Demo {

    public static void main(String[] args) {
        byte x, y;
        x=10;
        y=-10;
        System.out.println("左移运算符: x<<2 = "+(x<<2));
        System.out.println("由移运算符: x>>2 = "+(x>>2));
        System.out.println("无符号右移: x>>>2 = "+(x>>>2));
        System.out.println("无符号右移: y>>>2 = "+(y>>>2));


    }
}

输出结果为:

左移运算符: x<<2 = 40
由移运算符: x>>2 = 2
无符号右移: x>>>2 = 2
无符号右移: y>>>2 = 1073741821

 

一点教程,一个分享编程知识的公众号。跟着站长一起学习和进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「一点教程」,你已然超越了90%的程序员!

一点教程二维码