Javaの左のシフト演算


私たちはaを知っています ,見ることができる aに2を掛けるb乗
long a = 0x3;
		    long b = 30;
	        long longLeft  = a << b;
	        System.out.println(longLeft);
	        System.out.println(0x3 << 30);
	        System.out.println("-----");
	        System.out.println(Math.pow(-2, 31));
	        System.out.println(Integer.MIN_VALUE);
	        System.out.println("-----");
	        System.out.println(Math.pow(2, 31) - 1);
	        System.out.println(Integer.MAX_VALUE);
結果
3221225472
-1073741824
-----
-2.147483648E9
-2147483648
-----
2.147483647E9
2147483647
上の結果のe 9は、10を乗じた9乗を表します。
上記の例により、Javaでは演算の結果が整数タイプによって制限されることがわかった。
3<<30:
longである場合、a<intの場合、a<    2の30乗 バイナリでは0100 0000 0000 0000 0000 0000 0000 0000で表されています。
    2の30乗に3を掛け、2進法では上のものに2回を加えると、1回を加えると最高位が1000になります。(略28個の0)    もう1回プラスしてなります 1100……(略28個の0)
         1100……(略28個の0)  integerは32位、32位は符号を同時に表し、0は正、1は負を表します。
         この時に表示される値はIntegerの最小値より小さいので、最高値の表示を削除する必要があります。
         残りの 100.(略28個の0)は値で、つまり2の30乗、符号は負です。 -1*Math.pow(2,30)は、タイプがintegerの場合3<<30>と同じです。
a<=32)の場合:
2の32乗はバイナリで、1の後ろと32個の0があります。この時、integerでは、上の法則に従い、32桁を超えるのは0を32個しか見られません。それは0です。
a<<32はa<0はaに2を掛けた0乗です。 
 例えば左に33桁移動すると32桁先に左に1桁移動しますので、あります。 a<((b%32) b>=32の場合