Java 位AND运算符(&;)不';t工作如我所料

Java 位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

我将特征属性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 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是十进制的。