java - 按位 AND 运算符 (&) 没有像我预期的那样工作

标签 java android and-operator

我把 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/

相关文章:

java - 如何让Gson的fromJson创建对象的arraylilst

c++ - C++如何处理&&? (短路评估)

java - 如何创建具有 'Content-Type' 、授权 token 和正文的 Volley header ?

android - 支持旧设备

awk - if 语句中 and 运算符的语法错误

PHP: 如果 !empty & empty

java - 选择数组元素 PostgreSQL

java - Libgdx 有两个用自己的坐标系绘制的不同 View ?

java - 我可以运行 2 个 Mono 异步 Reactor Core 吗?

java - JSONObject.toString(int) 如何抛出 JSONException?