Java的右移涉及带符号右移(>>)、不带符号右移(>>>)。
 对于正数,因为符号位是0,带符号右移和不带符号右移左侧都用0填充,所以结果相同。
 对于负数,因为符号位是1,带符号右移左侧是用1填充,而不带符号右移左侧是用0填充,所以带符号右移和不带符号右移的结果不同。
代码示例:
package com.thb;
public class Test1 {
		
	public static void main(String[] args) {
		// 对于正数,带符号右移和不带符号右移的值相同
		System.out.println("正数带符号右移和不带符号右移验证:");
		System.out.println("要移位的初始值:" + 0x40000000);  		
		System.out.println("正数带符号右移:" + Integer.toHexString(0x40000000 >> 1));		
		System.out.println("正数不带符号右移:" + Integer.toHexString(0x40000000 >>> 1));
		System.out.println("--------------------------------");		
		
		// 对于负数,带符号右移和不带符号右移的值不同
		System.out.println("负数带符号右移和不带符号右移验证:");
		System.out.println("要移位的初始值:" + 0x80000000);	 
		System.out.println("负数带符号右移:" + Integer.toHexString(0x80000000 >> 1)); 
		System.out.println("负数不带符号右移:" + Integer.toHexString(0x80000000 >>> 1));
	}
}
运行输出:
 



















