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

Java移位操作>>,>>>与<<

2017-03-13 15:53 381 查看
带符号数右移
>>
,如果是正数,则在最高位补0,负数则补1

无符号右移
>>>
,在最高位补0

需要特别注意的是,在对char、byte、short等类型的数进行移位操作前,编译器都会自动地将数值转化为int型,然后进行移位操作。由于int型变量只占用4Byte(32bit),因此当右移的位数超过32bit时,移位运算没有任何意义。所以为了保证有效性,采用了取余操作,即
a>>n
等价于
a>>(n%32)


public static void main(String[] args) {
int a = -1;
System.out.println(a>>1);
System.out.println(a>>>1);
}


结果:

-1
2147483647


解释:

1111 1111 1111 1111 1111 1111 1111 1111 -1

1111 1111 1111 1111 1111 1111 1111 1111 -1

0111 1111 1111 1111 1111 1111 1111 1111 2147483647

左移操作
<<
,最低位用零补位,左移操作实际上相当于每移动一位乘2

public static void main(String[] args) {
int a = 3;
System.out.println(a);
System.out.println(a<<1);

}


结果:

3
6


注意:java中没有无符号左移,因为左移是在后面补0,而右移是在前面补0或者1,有无符号数取决于数的前面的第一位是0还是1,所以右移会产生到底补0还是1的问题,而左移始终是在右边补,不会产生符号问题,所以没有必要有无符号左移
<<<
,因为与
<<
的意义是一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java移位操作