我将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);
}
我真的不知道为什么会这样?
请帮帮我。 在此先感谢!!!
答案 0 :(得分:1)
这没什么奇怪的:
DEC BIN
a 10: 1010
b 2: 0010
a&b 2: 0010
按位运算符&
采用两个数字的二进制表示,并对这些位执行bit-and
。
a&b
将导致0:
<强> 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
。