web-dev-qa-db-ja.com

1 << 0とは何ですか?

 enum
    {
      kFlag_FPS         = 1 << 0,
      kFlag_Help        = 1 << 1,
      kFlag_RedBlue3D   = 1 << 2,
    }

私はこのコードが何であるかを理解しようとしていますが、何がわからないのですか:

1 << 0

手段?

どんな助けも大歓迎です!

29
CodeDoctorJL

MSDN-シフト演算子:>>および<<

左シフト演算子は、第1オペランドのビットパターンを、第2オペランドで指定されたビット数だけ左にシフトします。シフト操作によって空にされたビットはゼロで埋められます。これは、シフトと回転操作ではなく論理シフトです。

これは、ユーザーが1のビット値を取得し、正しい数値に基づいてビットを左にシフトしていることを意味します。

つまり、この場合、それらの値はバイナリでこのようになります。

1 << 0 = `0000 0001`
1 << 1 = `0000 0010`
1 << 2 = `0000 0100`

最初のシフトは必要ではありませんが、他のシフトとの整合性がより高く見えます。

34
Caesar

1 << 0は、0ポジションだけ左に1シフトされ、1になります。

7
1''

<<演算子はビットシフターです。したがって、1 << 2は、4を取り、1ビットだけシフトすると、2と等しくなります。 1 << 0を使用する場合、値に影響はなく、おそらくすべてが一貫しているように見えるようにするために存在します

5
sedavidw

_x << y_-xのビットを左に(より大きな値に)y回シフトすることを意味します。数学では、これはx * (2^y)またはx * pow(2, y)のようになります

3
Victor.Palyvoda

単純に

enum
    {
      kFlag_FPS         = 1,
      kFlag_Help        = 1 << 1,
      kFlag_RedBlue3D   = 1 << 2,
    }

しかし、コーダーはより対称性が好きです。

2
Ted Hopp

>> (Signed right shift)数値が負の場合は1がフィラーとして使用され、数値が正の場合は0がフィラーとして使用されます。

_       int x = -4; 
       System.out.println(x>>1);  //output -2  
       int y = 4; 
       System.out.println(y>>1); //output 2
_

>>> (Unsigned right shift) Javaでは、演算子「>>>」は符号なし右シフト演算子です。数字の符号に関係なく、常に0を埋めます。 // xは、32ビット2の補数形式を使用して格納されます。
// -1のバイナリ表現はすべて1です(111..1)

_       int x = -1;   
       System.out.println(x>>>29);  // The value of 'x>>>29' is 00...0111 
       System.out.println(x>>>30);  // The value of 'x>>>30' is 00...0011  
       System.out.println(x>>>31);  // The value of 'x>>>31' is 00...0001
_
0
Ping Woo