Побітове & проти логічного && оператора

1. Вступ

У Java ми маємо два способи сказати "І". Але яким користуватися?

У цьому підручнику ми розглянемо різницю між & та &&. І ми по дорозі дізнаємося про побітові операції та коротке замикання.

2. Використання побітового І

Побітовий оператор AND (&) порівнює кожну двійкову цифру двох цілих чисел і повертає 1, якщо обидва рівні 1, інакше повертає 0.

Давайте подивимось на два цілих числа:

int six = 6; int five = 5;

Далі застосуємо побітовий оператор І до цих чисел:

int resultShouldBeFour = six & five; assertEquals(4, resultShouldBeFour);

Щоб зрозуміти цю операцію, давайте розглянемо двійкове представлення кожного числа:

Binary of decimal 4: 0100 Binary of decimal 5: 0101 Binary of decimal 6: 0110

Оператор & виконує логічне І на кожному біті і повертає нове двійкове число:

0110 0101 ----- 0100

Нарешті, наш результат - 0100 - можна перетворити назад у десяткове число - 4 .

Давайте подивимося тестовий код Java:

int six = 6; int five = 5; int resultShouldBeFour = six & five; assertEquals(4, resultShouldBeFour);

2.1. Використання & з булевими значеннями

Крім того, ми можемо використовувати побітовий оператор AND ( & ) з логічними операндами. Він повертає true лише якщо обидва операнди істинні , інакше повертає false.

Візьмемо три логічні змінні:

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false;

Далі, давайте застосуємо побітовое І оператор по змінним trueBool і anotherTrueBool :

boolean trueANDtrue = trueBool & anotherTrueBool;

Тоді результат буде вірним .

Далі застосуємо побітовий оператор І на trueBool та falseBool :

boolean trueANDFalse = trueBool & falseBool;

У цьому випадку результат буде помилковим .

Давайте подивимося тестовий код Java:

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false; boolean trueANDtrue= trueBool & anotherTrueBool; boolean trueANDFalse = trueBool & falseBool; assertTrue(trueANDtrue); assertFalse(trueANDFalse);

3. Використання логічного І

Як і & , логічний оператор AND ( && ) порівнює значення двох булевих змінних або виразів. І він також повертає true, лише якщо обидва операнди істинні , інакше повертає false .

Візьмемо три логічні змінні:

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false;

Далі, давайте застосуємо логічний оператор І на змінних trueBool і anotherTrueBool :

boolean trueANDtrue = trueBool && anotherTrueBool;

Тоді результат буде вірним .

Далі застосуємо логічний оператор І на trueBool та falseBool :

boolean trueANDFalse = trueBool && falseBool;

У цьому випадку результат буде помилковим .

Давайте подивимося тестовий код Java:

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false; boolean anotherFalseBool = false; boolean trueANDtrue = trueBool && anotherTrueBool; boolean trueANDFalse = trueBool && falseBool; boolean falseANDFalse = falseBool && anotherFalseBool; assertTrue(trueANDtrue); assertFalse(trueANDFalse); assertFalse(falseANDFalse);

3.1. Коротке замикання

Отже, яка різниця? Ну, то && оператор короткого замикання. Це означає, що він не оцінює правий операнд або вираз, якщо лівий операнд або вираз є хибними .

Візьмемо два вирази, які вважають хибними:

First Expression: 2<1 Second Expression: 4<5 

Коли ми застосовуємо логічний оператор І до виразів 2 <1 і 4 <5, тоді він обчислює лише перший вираз 2 <1 і повертає false.

boolean shortCircuitResult = (2<1) && (4<5); assertFalse(shortCircuitResult);

3.2. Використання && із цілими числами

Ми можемо використовувати оператор & з логічними або числовими типами, але && можна використовувати лише з логічними операндами. Використання його з цілими операндами призводить до помилки компіляції:

int five = 2; int six = 4; int result = five && six;

4. Порівняння

  1. Оператор & завжди обчислює обидва вирази, тоді як оператор && обчислює другий вираз, лише якщо перший є істинним
  2. & порівнює кожен операнд побітово, тоді як && працює лише з логічними значеннями

5. Висновок

У цій статті ми використовували побітове та оператор для порівняння бітів із двох цифр, що призводить до нової цифри. Крім того, ми використали логічний оператор && для порівняння двох булевих значень, що призвело до булевого значення.

Ми також побачили деякі ключові відмінності між двома операторами.

Як завжди, ви можете знайти код для цього підручника на GitHub.