2

Beginning Android Gamesという本を勉強している最中です。私が気づいた1つのことはこれでした:

int action = event.getAction() & MotionEvent.ACTION_MASK;
int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK)
>> MotionEvent.ACTION_POINTER_ID_SHIFT;

そのような変数を見たのはこれが初めてなので、それが何をするのかわかりません。コードを Java で実行し、いくつかのサンプルを作成しました。

このコードを実行すると:

   int i = 10 >> 500;
System.out.print("Answer " + i); 

答えは0でしょう?何故ですか?

そして、このコードを実行すると:

int i = 10 & 500;
System.out.print("Answer  " + i);

最初は値の連結だと思ったので、i = 10500 と仮定しましたが、そうではありません。答えは同じです。まだ0?ここで何が起こっているか知っている人はいますか?

4

4 に答える 4

11

& はビット単位の演算子ですが、 && は条件演算子です。ビット単位の演算子で遊んでいます。

AND 演算子は、結果が課金されるためには、シグナル A と B の両方が課金される必要があることを指定します。したがって、次のように、バイト 10 と 6 を AND 演算すると 2 になります。

a = 0000 1010 (10)

b = 0000 0110 (6)
  ---- ----
r = 0000 0010 (2)  // a&b

その他の例については、こちらを参照してください。

ビット単位およびビット シフト演算子

~       Unary bitwise complement
<<      Signed left shift
>>      Signed right shift
>>>     Unsigned right shift
&       Bitwise AND
^       Bitwise exclusive OR
|       Bitwise inclusive OR
于 2013-04-23T06:22:24.830 に答える
3

それらはBitwise Operatorsと呼ばれます。

1.

int i = 10 >> 500;

10 のビット パターンを 500 ずつ符号付きで右にシフトしたものです。ここで各ビットを 500 ずつ右にシフトすると、最終的な数値は 0 になります。

2.

int i = 10 & 500;

10 と 500 のビット パターンのビットごとの AND です。0 0000 1010 の各ビットと 1 1111 0100 のビットごとの AND は 0 になります。

System.out.println(Integer.toBinaryString(number));ビットパターンを印刷して確認することができます。

于 2013-04-23T06:20:57.653 に答える
1

最初に Javaの演算子の基本をいくつか読むことができると思います。

>>これは連結演算子ではなく、Java のシフト演算子です。

符号付き左シフト演算子 "<<" はビット パターンを左にシフトし、符号付き右シフト演算子 ">>" はビット パターンを右にシフトします。ビット パターンは左側のオペランドで指定され、シフトする位置の数は右側のオペランドで指定されます。

&ビットごとのANDと呼ばれます

ビットごとの & 演算子は、ビットごとの AND 演算を実行します。

于 2013-04-23T06:22:21.787 に答える