按位AND运算符(&)并不像我预期的那样工作

时间:2016-10-13 04:47:08

标签: java android and-operator

我将10的特性属性带入了int变量charaProp。

final int charaProp = characteristic.getProperties();

我将过滤属性2(BluetoothGattCharacteristic.PROPERTY_READ)带入int变量属性。

final int property = BluetoothGattCharacteristic.PROPERTY_READ;

我按位AND运算charaProp和属性以查看要执行的操作。

final int tmp = charaProp & property;

太奇怪了,结果应该为0的AND运算符产生2。 Screen shot

然后流程执行读取操作。

 if ((charaProp & BluetoothGattCharacteristic.PROPERTY_READ) > 0) {
             mBluetoothLeService.readCharacteristic(characteristic);
 }

我真的不知道为什么会这样?

请帮帮我。 在此先感谢!!!

3 个答案:

答案 0 :(得分:1)

这没什么奇怪的:

     DEC  BIN
   a  10: 1010
   b   2: 0010
  a&b  2: 0010

按位运算符&采用两个数字的二进制表示,并对这些位执行bit-and

如果

a&b将导致0:

  • a == 0 || b == 0
  • a,b各自不同,但其中一个有位设置。

<强> HINT
我有一个非常重要的暗示。不要以为Java没有以应有的方式工作。这可能是您的代码逻辑中的一个问题。你的标题应该是: Java operator&amp;不按我预期的方式工作。最后,Java总是按照规范工作。问题始终存在逻辑。有时显而易见,有时是关于计算机(和JVM)如何工作的逻辑和知识。

答案 1 :(得分:0)

二进制10是1010。二进制2是10。基数10中10 & 1010 = 10 = 2。

答案 2 :(得分:0)

这是正确的行为。看看这些数字的二进制表示。

10 == 0b1010

那是8(0b1000)+ 2(0b10)。所以10&amp; 2 == 2.尝试一下:

assert 0b1010 & 0b0010 == 2;

&amp;运算符排列位,并为每对执行逻辑。显然,10和2中的第二个最低有效位是1.因此,如果我们将第二个位视为布尔值,true && true == true