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
热门文章
优秀文章