154

シフト演算子を理解しようとしていますが、あまり得られませんでした。以下のコードを実行しようとしたとき

System.out.println(Integer.toBinaryString(2 << 11));
System.out.println(Integer.toBinaryString(2 << 22));
System.out.println(Integer.toBinaryString(2 << 33));
System.out.println(Integer.toBinaryString(2 << 44));
System.out.println(Integer.toBinaryString(2 << 55));

私は以下を取得します

1000000000000    
100000000000000000000000    
100    
10000000000000    
1000000000000000000000000    

誰か説明してくれませんか?

4

9 に答える 9

220
System.out.println(Integer.toBinaryString(2 << 11)); 

バイナリ 2( 10) を左に 11 回シフトします。したがって:1000000000000

System.out.println(Integer.toBinaryString(2 << 22)); 

バイナリ 2( 10) を 22 回左にシフトします。したがって:100000000000000000000000

System.out.println(Integer.toBinaryString(2 << 33)); 

現在、int は 4 バイトなので、32 ビットです。したがって、33 シフトすると、1 シフトするのと同じになります。したがって、次のようになります。100

于 2012-06-06T08:48:30.617 に答える
13

これが役立つと思います:

    System.out.println(Integer.toBinaryString(2 << 0));
    System.out.println(Integer.toBinaryString(2 << 1));
    System.out.println(Integer.toBinaryString(2 << 2));
    System.out.println(Integer.toBinaryString(2 << 3));
    System.out.println(Integer.toBinaryString(2 << 4));
    System.out.println(Integer.toBinaryString(2 << 5));

結果

    10
    100
    1000
    10000
    100000
    1000000

編集:

これを読む必要があります(ビットごとのシフト演算子の仕組み)

于 2014-09-10T03:54:31.540 に答える
4

その数だけパディングしてビットをシフトします0's

たとえば、

  • 2 桁左シフトの 2進数10 は2桁の数字です210008
  • 3 だけ左にシフトする10 数字であるバイナリは、数字である21000016
于 2012-06-06T08:47:18.477 に答える
2

シフトは、データ型 (char、int、および long int) で実装できます。float および double データはシフトされません。

value= value >> steps  // Right shift, signed data.
value= value << steps  // Left shift, signed data.
于 2015-02-26T21:15:55.503 に答える