1

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

final int charaProp = characteristic.getProperties();

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

final int property = BluetoothGattCharacteristic.PROPERTY_READ;

我对 charaProp 和属性进行了按位与运算,以查看要执行哪个读取或写入。

final int tmp = charaProp & property;

太奇怪了,结果应该为 0 的 AND 运算符产生 2。 屏幕截图

流去执行读取操作。

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

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

请帮我。提前致谢!!!

4

3 回答 3

1

这并不奇怪:

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

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

a&b在以下情况下将导致 0:

  • a==0 || b == 0
  • a、b 各不相同,但其中一个设置了位。

提示
我有一个非常重要的提示给你。不要假设 Java 没有以应有的方式工作。这可能是您的代码逻辑中的一个问题。你的标题应该是:Java operator & not working as I expected it to work。最后,Java 总是按照规范工作。问题总是与逻辑有关。有时是显而易见的,有时是关于计算机(和 JVM)如何工作的逻辑和知识。

于 2016-10-13T04:51:43.250 回答
0

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

10 == 0b1010

那是 8 (0b1000) + 2 (0b10)。所以 10 & 2 == 2。试试看:

assert 0b1010 & 0b0010 == 2;

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

于 2016-10-13T04:59:43.203 回答
0

二进制的 10 是1010. 二进制中的 2 是10. 10 & 1010 = 10= 2 以 10 为底。

于 2016-10-13T04:50:58.127 回答