算術移位 和 邏輯移位

//		System.out.println(5<<2); //運行結果是20  // 101 左移2位 10100
//		System.out.println(5>>2); //運行結果是 1
//		System.out.println(-5>>>2);
		// >> 和 << 算術移位,帶符號位的 右移 和左移,不夠補上 符號位(便是,正數右移,高位用0補,負數右移,高位用1補)
		// eg: 5  => 101  5>>2    5右移2位也就是 1  前面空的則由符號位 補齊,則是 001
		// eg: -5 => 101    取反:010,而後 +1 -5>>2  =》  最終: 011
		int i = -5;
		System.out.println(Integer.toBinaryString(i));       // 11111111111111111111111111111011
		System.out.println(Integer.toBinaryString(i >> 2));  // 11111111111111111111111111111110
		System.out.println(i >> 2);

		System.out.println("-----------------------");
		// >>> 和 <<< 邏輯移位,無符號位的 右移和左移, 帶動符合移動,不夠補0
		// 當負數使用無符號右移時,用0進行補位(天然而然的,就由負數變成了正數了)
		int k = 5; 
		System.out.println(Integer.toBinaryString(k));        // 101
		System.out.println(Integer.toBinaryString(k >>> 2));  // 1
		System.out.println( k >>> 2);                         // 1
		
		System.out.println("-----------------------");
		int m = -5; 
		System.out.println(Integer.toBinaryString(m));        // 11111111111111111111111111111011
		System.out.println(Integer.toBinaryString(m >>> 2));  // 111111111111111111111111111110
		System.out.println( m >>> 2);                         // 1073741822
	}
}
相關文章
相關標籤/搜索