什么是按位操作?

Cod*_*ave 2 java bitwise-operators

我正在研究名为Beginning Android Games的书.我注意到的一件事是:

int action = event.getAction() & MotionEvent.ACTION_MASK;
int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK)
>> MotionEvent.ACTION_POINTER_ID_SHIFT;
Run Code Online (Sandbox Code Playgroud)

这是我见过类似变量的第一次,所以我不知道它是做什么的.我在java中运行代码并创建了一些示例.

如果我运行此代码:

   int i = 10 >> 500;
System.out.print("Answer " + i); 
Run Code Online (Sandbox Code Playgroud)

答案是0?这是为什么?

如果我运行此代码:

int i = 10 & 500;
System.out.print("Answer  " + i);
Run Code Online (Sandbox Code Playgroud)

起初我认为这是价值的连接所以我会假设i = 10500但事实并非如此.答案是一样的.还是0?谁知道这里发生了什么?

Ach*_*Jha 9

&是按位运算符,而&&是条件运算符.您正在使用按位运算符.

AND运算符指定必须对要收取的结果收取信号A和B的费用.因此,对字节10和6进行AND运算得到2,如下:

a = 0000 1010 (10)

b = 0000 0110 (6)
  ---- ----
r = 0000 0010 (2)  // a&b
Run Code Online (Sandbox Code Playgroud)

有关更多示例,请参见此处

按位和位移算子

~       Unary bitwise complement
<<      Signed left shift
>>      Signed right shift
>>>     Unsigned right shift
&       Bitwise AND
^       Bitwise exclusive OR
|       Bitwise inclusive OR
Run Code Online (Sandbox Code Playgroud)