Побитовый оператор AND (&) не работает, поскольку я ожидал, что он будет работать

Я привел характеристическое свойство, которое является окончательным int charaProp = character.getProperties (); в int variable charaProp.

final int property = BluetoothGattCharacteristic.PROPERTY_READ;

И я включил свойство фильтрации, которое равно 2 (BluetoothGattCharacteristic.PROPERTY_READ) в свойство переменной переменной.

final int tmp = charaProp & property;

Я побиваю ANDed charaProp и свойство, чтобы посмотреть, какой из них, читать или писать, выполнять.

if ((charaProp & BluetoothGattCharacteristic.PROPERTY_READ) > 0) { mBluetoothLeService.readCharacteristic(characteristic); }

Слишком странно, оператор AND, результат которого должен быть 0, производит 2. Снимок экрана

И поток идет для выполнения действия чтения.

     DEC  BIN
   a  10: 1010
   b   2: 0010
  a&b  2: 0010

Я действительно не знаю, почему это происходит?

Пожалуйста, помогите мне. Заранее спасибо!!!

java,android,and-operator,

1

Ответов: 3


1

В этом нет ничего странного:

&

Побитовый оператор bit-andпринимает двоичное представление двух чисел и выполняет a&bна этих битах.

1010 приведет к 0 в случае:

  • a == 0 || b == 0
  • a, b различаются по каждому, но где один из них имеет бит.

СОВЕТ .
У меня для вас очень важный намек. НЕ допускайте, чтобы Java работала не так, как должна. Вероятно, это проблема в вашей логике кода. Ваш заголовок должен быть: Java-оператор и не работает, поскольку я ожидал, что он сработает . В конце концов, Java всегда работает в соответствии со спецификацией. Проблемы всегда с логикой. Иногда очевидна, иногда логика и знания о том, как работают компьютеры (и JVM).


0

10 в двоичном формате 10. 2 в двоичном 10. 10 & 1010 = 10= 2 в базе 10.


0

Это правильное поведение. Посмотрите на двоичные представления этих чисел.

10 == 0b1010

Это 8 (0b1000) + 2 (0b10). Итак, 10 & 2 == 2. Попробуйте:

assert 0b1010 & 0b0010 == 2;

Оператор & выводит биты и делает логическую и для каждой пары. Очевидно, что второй младший значащий бит как в 10, так и в 2 равен 1. Поэтому, если мы думаем о втором бите как о булевом true && true == true.

Java, андроид, и-оператор,
Похожие вопросы