您的位置:首页 > 编程语言 > Java开发

Java中移位操作运算符的理解

2016-07-20 10:17 204 查看
java中的移位运算符有三种:

1、 <<: 左移

2、 >>: 右移

3、 >>>: 无符号右移

使用方法:左移就是将左边的操作数在内存中的二进制数据左移指定的位数,左边移空的部分补零,右移:如果最高位是0,空位就填0,如果最高位是1,空位就填1。无符号右移无论最高位是什么,空位都补零。

数据在内存中以补码的形式存储

左移和右移的数学意义:

对于左移,对于整型a, a<<n=a*2^n(前提是结果在整型的范围之内),对于右移 正的整型a, a>>n=a/2^n,对于负的整型a,a>>n=-(|a|/2^n+1);

为什么对于右移,正数和负数的结果不一样呢?

我们可以看一个例子:

package sort;

public class sort1 {

public static void main(String[] args) {
// TODO Auto-generated method stub

int a=-123;
System.out.println("原二进制位:"+Integer.toBinaryString(a));
int b=a>>2;
System.out.println("右移两位结果为:"+b);
System.out.println("右移后二进制位:"+Integer.toBinaryString(b));
int c=123;
System.out.println("原二进制位:"+Integer.toBinaryString(c));
int d=c>>2;
System.out.println("右移后的结果为:"+d);
System.out.println("右移后二进制位:"+Integer.toBinaryString(d));
}
}


运行结果为:



对于123,其二进制数为0 1111011,右移两位相当于把0 111000右移两位,而0 111000的十进制为120,所以结果为120/4=30;

对于-123,其二进制数为1 0000101,右移两位相当于把1 0000100右移两位,而1 0000100的十进制为-124,所以结果为-124/4=-31。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: