enum
{
kFlag_FPS = 1 << 0,
kFlag_Help = 1 << 1,
kFlag_RedBlue3D = 1 << 2,
}
私はこのコードが何であるかを理解しようとしていますが、何がわからないのですか:
1 << 0
手段?
どんな助けも大歓迎です!
左シフト演算子は、第1オペランドのビットパターンを、第2オペランドで指定されたビット数だけ左にシフトします。シフト操作によって空にされたビットはゼロで埋められます。これは、シフトと回転操作ではなく論理シフトです。
これは、ユーザーが1
のビット値を取得し、正しい数値に基づいてビットを左にシフトしていることを意味します。
つまり、この場合、それらの値はバイナリでこのようになります。
1 << 0 = `0000 0001`
1 << 1 = `0000 0010`
1 << 2 = `0000 0100`
最初のシフトは必要ではありませんが、他のシフトとの整合性がより高く見えます。
1 << 0
は、0ポジションだけ左に1シフトされ、1になります。
<<
演算子はビットシフターです。したがって、1 << 2
は、4
を取り、1
ビットだけシフトすると、2
と等しくなります。 1 << 0
を使用する場合、値に影響はなく、おそらくすべてが一貫しているように見えるようにするために存在します
_x << y
_-xのビットを左に(より大きな値に)y回シフトすることを意味します。数学では、これはx * (2^y)
またはx * pow(2, y)
のようになります
単純に
enum
{
kFlag_FPS = 1,
kFlag_Help = 1 << 1,
kFlag_RedBlue3D = 1 << 2,
}
しかし、コーダーはより対称性が好きです。
>> (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
_