我把 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。 Screen shot
然后流程开始执行读取操作。
if ((charaProp & BluetoothGattCharacteristic.PROPERTY_READ) > 0) {
mBluetoothLeService.readCharacteristic(characteristic);
}
我真的不知道为什么会这样?
请帮帮我。 提前致谢!!!
最佳答案
这没什么奇怪的:
DEC BIN
a 10: 1010
b 2: 0010
a&b 2: 0010
按位运算符&
获取两个数字的二进制表示并对这些位执行位与
。
a&b
在以下情况下将产生 0:
- a==0 || b == 0
- a、b 各不相同,但其中一个设置了位。
提示:
我有一个非常重要的提示给你。不要假设 Java 没有以它应该的方式工作。这可能是您的代码逻辑中的问题。您的标题应该是:Java 运算符并没有像我预期的那样工作。最后,Java 总是按照规范工作。问题总是出在逻辑上。有时是显而易见的,有时是关于计算机(和 JVM)如何工作的逻辑和知识。
关于java - 按位 AND 运算符 (&) 没有像我预期的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40012476/