Java 位AND运算符(&;)不';t工作如我所料
我将特征属性10引入int变量charaPropJava 位AND运算符(&;)不';t工作如我所料,java,android,and-operator,Java,Android,And Operator,我将特征属性10引入int变量charaProp final int charaProp=characteristic.getProperties() 我将过滤属性2(BluetoothGattCharacteristic.property_READ)引入int变量属性 final int property=BluetoothGattCharacteristic.property\u READ 我将charaProp和property按位and,以查看要执行的是读还是写 final int tm
final int charaProp=characteristic.getProperties()代码>
我将过滤属性2(BluetoothGattCharacteristic.property_READ)引入int变量属性
final int property=BluetoothGattCharacteristic.property\u READ代码>
我将charaProp和property按位and,以查看要执行的是读还是写
final int tmp=charaProp&property代码>
太奇怪了,AND运算符的结果应该是0,结果是2。
然后流执行读取操作
if ((charaProp & BluetoothGattCharacteristic.PROPERTY_READ) > 0) {
mBluetoothLeService.readCharacteristic(characteristic);
}
我真的不知道为什么会这样
请帮帮我。
提前感谢 二进制中的10是1010
。二进制中的2是10
<代码>10&1010=10
=2,以10为基数。这并不奇怪:
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)如何工作的逻辑和知识。这是正确的行为。看看这些数字的二进制表示
10 == 0b1010
这是8(0b1000)+2(0b10)。所以10&2==2。试一试:
assert 0b1010 & 0b0010 == 2;
运算符将位对齐,并对每对位执行逻辑“与”。显然,10和2中的第二个最低有效位都是1。因此,如果我们把第二位看作布尔值,true&&true==true
那么,二进制中的10是1010,二进制中的2是0010,所以答案2是正确的。二进制中的10是2+8,也就是1010。二进制中的2是10。发送它们将产生二进制10,即2。你的代码工作正常。呜呜!!谢谢…我没注意到10是十进制的。