1. 程式人生 > >java中的左移、右移移位運算子:<<,>>,>>>

java中的左移、右移移位運算子:<<,>>,>>>

java中有三種移位運算子

<<      :     左移運算子,num << 1,相當於num乘以2

>>      :     右移運算子,num >> 1,相當於num除以2

>>>    :     無符號右移,忽略符號位,空位都以0補齊

注意:無符號右移的規則只記住一點:忽略了符號位擴充套件,0補最高位  無符號右移運算子>>> 只是對32位和64位的值有意義

<<表示左移,如果該數為正,則低位補0,若為負數,則低位補0;

>>表示右移,如果該數為正,則高位補0,若為負數,則高位補1;

public static void main(String args[]) {
		int n = 18;
		System.out.println("原始正數------>" + Integer.toBinaryString(n));
		System.out.println("正數左移------>" + Integer.toBinaryString(n<<2));//低位補0,移動n位,乘以2的n次冪
		System.out.println("正數右移------>" + Integer.toBinaryString(n>>2));//高位補0,移動n位,除以2的n次冪
		System.out.println("正數無符號右移-->" + Integer.toBinaryString(n>>>2));//與>>結果相同
		
		System.out.println("原始負數------>" + Integer.toBinaryString(-n));	
		System.out.println("負數左移------>" + Integer.toBinaryString(-n<<2));//低位補0
		System.out.println("負數右移------>" + Integer.toBinaryString(-n>>2));//高位補1	
		System.out.println("負數無符號右移-->" + Integer.toBinaryString(-n>>>2));//無符號右移,忽略符號位,高位都以0補齊
		
	}

執行結果:

原始正數------>10010
正數左移------>1001000
正數右移------>100
正數無符號右移-->100
原始負數------>11111111111111111111111111101110
負數左移------>11111111111111111111111110111000
負數右移------>11111111111111111111111111111011
負數無符號右移-->111111111111111111111111111011