Логические операторы Java
Описание
Иногда выполнение оператора определяется сочетанием нескольких условий. Вы можете использовать логические операторы для объединения этих условий. Логические операторы известны как логические операторы или побитовые логические операторы. Логический оператор работает с логическими значениями, чтобы создать новое логическое значение. Побитовые логические операторы: «&», «|», «^» и «~» или «!». В следующей таблице приведены результаты каждой операции.
б | & б | | б | а ^ Ь | ~ а или! а | |
---|---|---|---|---|---|
верно (1) | верно (1) | правда | правда | ложный | ложный |
верно (1) | ложь (0) | ложный | правда | правда | ложный |
ложь (0) | верно (1) | ложный | правда | правда | правда |
ложь (0) | ложь (0) | ложный | ложный | ложный | правда |
НЕ оператор
Унарный оператор NOT, называемый также побитовым дополнением, инвертирует все биты своего операнда. Если применяется к целочисленному операнду, он будет инвертировать все биты аналогично, если применяется к логическому литералу, он обратит его.
int a = 23; // 23 представляется в двоичном виде как 10111 int b = ~ a; // это вернет биты 01000, которые являются 8 в десятичном виде логическое x = true; логическое y =! x; // Это назначит ложное значение для y, так как x истинно
Оператор AND
Оператор AND «&» выдает 1 бит, если оба операнда равны 1, иначе 0 бит. Точно так же для булевых операндов, это приведет к истине, если оба операнда верны, иначе результат будет ложным.
int var1 = 23; // логическое значение будет 010111 int var2 = 33; // логическое значение будет 100001 int var3 = var1 & var2 // результат в двоичном виде 000001 & в десятичном формате 1 логическое b1 = true; логическое b2 = ложь; логическое b3 = b1 & b2; // b3 будет ложным
Оператор ИЛИ
Оператор ИЛИ «|» создает 0 бит, если оба операнда равны 0, иначе 1 бит. Точно так же для булевых операндов, это приведет к ложному, если оба операнда ложны, иначе результат будет истинным.
int var1 = 23; // логическое значение будет 010111 int var2 = 33; // логическое значение будет 100001 int var3 = var1 | var2 // результат в двоичном коде 110111 и десятичный 55 логическое b1 = true; логическое b2 = ложь; booleanb3 = b1 | b2; // b3 будет правдой
Оператор XOR (исключительное ИЛИ)
Оператор XOR «^» создает 0 бит, если оба операнда одинаковы (либо оба 0, либо оба 1), в противном случае 1 бит. Точно так же для булевых операндов это приведет к ложному, если оба операнда одинаковы (либо оба ложные, либо оба истинные), иначе результат будет истинным.
iint var1 = 23; // логическое значение будет 010111 int var2 = 33; // логическое значение будет 100001 int var3 = var1 ^ var2 // результат в двоичном формате 110110 & в десятичном виде 54 логическое b1 = true; логическое b2 = ложь; booleanb3 = b1 ^ b2; // b3 будет правдой
Давайте посмотрим на программу ниже, которая демонстрирует вышеуказанные операторы для логических и целочисленных операций.
Java-код: перейти к редактору
public class BitwiseLogicalOpDemo {
public static void main(String[] args) {
//Integer bitwise logical operator
int a = 65; // binary representation 1000001
int b = 33; // binary representation 0100001
System.out.println("a & b=" + (a & b));
System.out.println("a | b=" + (a | b));
System.out.println("a ^ b=" + (a ^ b));
System.out.println("~a=" + ~a);
//boolean logical operator
boolean bool1 = true;
boolean bool2 = true;
boolean bool3 = false;
System.out.println("bool1 & bool2=" + (bool1 & bool2));
System.out.println("bool2 & bool3=" + (bool2 | bool3));
System.out.println("bool2 | bool3=" + (bool2 | bool3));
System.out.println("bool1 ^ bool2=" + (bool1 ^ bool2));
System.out.println("!bool1=" + !bool1);
}
}
Выход:
Операции побитового сдвига:
>> (Подпись вправо сдвиг):
В Java оператор «>>» является оператором со смещением вправо. Все целые числа подписаны в Java, и можно использовать >> для отрицательных чисел. Оператор «>>» использует знаковый бит (крайний левый бит), чтобы заполнить концевые позиции после сдвига. Если число отрицательное, то 1 используется в качестве наполнителя, а если число положительное, то 0 используется в качестве наполнителя. Проще говоря, это разделит число на 2 к степени числа сдвинутого бита
int a = 8; // двоичное представление равно 1000 System.out.println (а >> 1); // Это выведет 4 (двоичное представление 0100)
<< (Опаленный левый сдвиг):
Этот оператор перемещает все биты в левую сторону (просто умножьте число на два, чтобы увеличить число сдвинутых битов).
int a = 8; // двоичное представление равно 1000 System.out.println (а << 2); // Это выведет 32 (двоичное представление 100000)
>>> (беззнаковое смещение вправо):
Как вы только что видели, оператор >> автоматически заполняет старший бит своим предыдущим содержимым каждый раз, когда происходит сдвиг. Это сохраняет знак значения. Однако иногда это нежелательно. Например, если вы перемещаете что-то, что не представляет числовое значение, вы можете не захотеть, чтобы происходило расширение знака. Первый бит представляет собой знак целого числа.
int a = -2; // Это представляется в двоичном виде как 10000000 0000000000000000 000000010 System.out.println (а >>> 1); // 01000000 00000000 00000000 00000001 в десятичном виде = 2147483647
Ниже программа демонстрирует операторы сдвига.
Java-код: перейти к редактору
public class ShiftOperatorDemo {
public static void main(String[] args) {
int a = 34; //binary representation 00000000 00000000 00000000 00100010
int b = -20; //binary representation 10000000 00000000 00000000 00010100
System.out.println("Signed Right Shift 34 devide by 2=" + (a>>1) );
System.out.println("Signed Right Shift -20 devide by 2=" + (b>>1) );
System.out.println("Signed Left Shift 34 multiply by 2=" + (a<<1) );
System.out.println("Signed Letf Shift -20 multiply by 2=" + (b<<1) );
System.out.println("unsigned Right Shift of 34 =" + (a>>>1) );
System.out.println("unsigned Right Shift of -20 =" + (b>>>1) );
}
}
Выход:
Резюме
- Логические операторы известны как логические операторы или побитовые логические операторы.
- Логическими операторами являются & (и), | (или), ^ (экс-или),! / ~ (нет).
- Операции двоичного сдвига: >> (сдвиг вправо), << (сдвиг влево), >>> (сдвиг вправо без знака).
Редактор кода Java:
Предыдущая: Условный оператор
Далее: Switch Satement
Новый контент: Composer: менеджер зависимостей для PHP , R программирования