Логические операторы в java

Логические операторы в java

Операторы в языке Java — это специальные символы, которые сообщают транслятору о том, что вы хотите выполнить операцию с некоторыми операндами. Типы операций указываются с помощью операторов, а операнды — это переменные, выражения или литералы. Некоторые операторы требуют одного операнда, их называют унарными. Одни операторы ставятся перед операндами и называются префиксными, другие — после, их называют постфиксными операторами. Большинство же операторов ставят между двумя операндами, такие операторы называются инфиксными бинарными операторами. Существует тернарный оператор, работающий с тремя операндами. В Java имеется 44 встроенных оператора. Их можно разбить на 4 класса — арифметические, битовые, операторы сравнения и логические.

4.1. Арифметические операторы

Арифметические операторы используются для вычислений так же как в алгебре (см. таблицу со сводкой арифметических операторов ниже). Допустимые операнды должны иметь числовые типы. Например, использовать эти операторы для работы с логическими типами нельзя, а для работы с типом char можно, поскольку в Java тип char — это подмножество типа int.

Таблица 4.1. Таблица арифметических операторов

Сложение с присваиванием

Вычитание (также унарный минус)

Вычитание с присваиванием

Умножение с присваиванием

Деление с присваиванием

Деление по модулю

Деление по модулю с присваиванием

Ниже в качестве примера, приведена простая программа, демонстрирующая использование операторов. Обратите внимание на то, что операторы работают как с целыми литералами, так и с переменными.

public static void int a = 1 + 1;

Исполнив эту программу, вы должны получить приведенный ниже результат:

4.1.1. Оператор деления по модулю

Оператор деления по модулю — оператор mod, обозначается символом %. Этот оператор возвращает остаток от деления первого операнда на второй. Функция mod в Java работает не только с целыми, но и с вещественными типами. Приведенная ниже программа иллюстрирует работу этого оператора.

public static void main (String args []) <

System.out.print("x mod 10 = " + x % 10);

System.out.println("y mod 10 = " + у % 10);

Выполнив эту программу, вы получите следующий результат:

х mod 10 = 2 у mod 10 = 2.3

4.1.2. Арифметические операторы присваивания

Для каждого из арифметических операторов есть форма, в которой одновременно с заданной операцией выполняется присваивание. Если требуется написать а += 4, то с таким же успехом можно использовать а = а +4.

Читайте также:  Как настроить интернет йота на планшете

Такой способ пригоден для всех бинарных операторов, которые используются в выражениях вида:

переменная = переменная оператор выражение;

Любой такой оператор можно записать в короткой форме:

переменная оператор = выражение;

4.1.3. Инкремент и декремент

В Java существует два оператора, называемых операторами инкремента и декремента (++ и —) и являющихся сокращенным вариантом записи для сложения или вычитания из операнда единицы. Эти операторы уникальны в том плане, что могут использоваться как в префиксной, так и в постфиксной форме. При использовании префиксной формы операнд модифицируется перед выполнением операции. В постфиксной форме сначала используется содержимое операнда, а лишь после этого операнд инкрементируется или декрементируется. Следующий пример иллюстрирует использование операторов инкремента и декремента.

public static void main(String args[])<

Результат выполнения данной программы будет таким:

4.2. Целочисленные битовые операторы

Для целых числовых типов данных — long, int, short, char и byte — определен дополнительный набор операторов, с помощью которых можно проверять и модифицировать состояние отдельных битов соответствующих значений. В таблице 4.2 приведена сводка таких операторов. Операторы битовой арифметики работают с каждым битом как с самостоятельной величиной.

public static void main(String args []) <

int a = 3; // 0+2+1 или двоичное 0011

int b = 6; // 4+2+0 или двоичное 0110

System.out.println(" a = " + binary[a]);

System.out.println(" b = " + binary[b]);

System.out.println(" ab = " + binary[c]);

System.out.println(" a^b = " + binary[e]);

Ниже при­веден результат, полученный при выполнении этой программы:

С: > Java BitLogic

Сдвиг и влево и вправо

Оператор >> означает в языке Java сдвиг вправо. Он перемещает все биты своего левого операнда вправо на число позиций, заданное правым операндом. Когда биты левого операнда выдвигаются за самую правую позицию слова, они теряются. При сдвиге вправо освобождающиеся старшие (левые) разряды сдви­гаемого числа заполняются предыдущим содержимым знакового разряда. Такое поведение называют расширением знакового разряда.

В следующей программе байтовое значение преобразуется в строку, содержащую его шестнадцатиричное представление. Обратите внимание — сдвинутое значение приходится маскировать, то есть логически умножать на значение 0 х 0 f, для того, чтобы очистить заполняемые в результате расширения знака биты и по­низить значение до пределов, допустимых при индексировании массива шестнадцатиричных цифр.

Читайте также:  Ночная подсветка в туалете

static public void main(String args[]) <

Ниже приведен результат работы этой программы:

Беззнаковый сдвиг вправо

Часто требуется, чтобы при сдвиге вправо расширение знакового раз­ряда не происходило, а освобождающиеся левые разряды просто запол­нялись бы нулями.

static public void main(String args[]) <

Для этого примера переменную b можно было бы инициализировать произвольным отрицательным числом, мы использовали число с шест­надцатиричным представлением 0xf1. Переменной с присваивается ре­зультат знакового сдвига b вправо на 4 разряда. Как и ожидалось, рас­ширение знакового разряда приводит к тому, что 0xf1 превращается в 0xff. Затем в переменную d заносится результат беззнакового сдвига b вправо на 4 разряда. Можно было бы ожидать, что в результате d со­держит 0x0f, однако на деле мы снова получаем 0xff. Это — результат расширения знакового разряда, выполненного при автоматическом по­вышении типа переменной b до int перед операцией сдвига вправо. На­конец, в выражении для переменной е нам удается добиться желаемого результата — значения 0x0f. Для этого нам пришлось перед сдвигом вправо логически умножить значение переменной b на маску 0xff, очис­тив таким образом старшие разряды, заполненные при автоматическом повышении типа. Обратите внимание, что при этом уже нет необходи­мости использовать беззнаковый сдвиг вправо, поскольку мы знаем со­стояние знакового бита после операции AND.

С: > java ByteUShift

Битовые операторы присваивания

Так же, как и в случае арифметических операторов, у всех бинарных битовых операторов есть родственная форма, позволяющая автоматичес­ки присваивать результат операции левому операнду. В следующем примере создаются несколько целых переменных, с ко­торыми с помощью операторов, указанных выше, выполняются различ­ные операции.

public static void main(String args[]) <

Результаты исполнения программы таковы:

С:> Java OpBitEquals

Для того, чтобы можно было сравнивать два значения, в Java имеется набор операторов, описывающих отношение и равенство. Список таких операторов приведен в таблице.

больше или равно

Булевы логические операторы

Булевы логические операторы, сводка которых приведена в таблице ниже, оперируют только с операндами типа boolean. Все бинарные ло­гические операторы воспринимают в качестве операндов два значения типа boolean и возвращают результат того же типа.

логическое И (AND)

И (AND) с присваиванием

Читайте также:  Ноль без границ за бонусные баллы

логическое ИЛИ (OR)

ИЛИ (OR) с присваиванием

логическое исключающее ИЛИ (XOR)

исключающее ИЛИ (XOR) с присваиванием

оператор OR быстрой оценки выражений (short circuit OR)

оператор AND быстрой оценки выражений (short circuit AND)

логическое унарное отрицание (NOT)

тернарный оператор if-then-else

Результаты воздействия логических операторов на различные комби­нации значений операндов показаны в таблице.

Программа, приведенная ниже, практически полностью повторяет уже знакомый вам пример BitLogic. Только но на этот раз мы работаем с булевыми логическими значениями.

public static void main(String args[]) <

С: > Java BoolLogic

Операторы быстрой оценки логических выражений (short circuit logical operators)

Существуют два интересных дополнения к набору логических опера­торов. Это — альтернативные версии операторов AND и OR, служащие для быстрой оценки логических выражений. Вы знаете, что если первый операнд оператора OR имеет значение true, то независимо от значения второго операнда результатом операции будет величина true. Аналогично в случае оператора AND, если первый операнд — false, то значение вто­рого операнда на результат не влияет — он всегда будет равен false. Если вы в используете операторы && и || вместо обычных форм & и |, то Java не производит оценку правого операнда логического выражения, если ответ ясен из значения левого операнда. Общепринятой практикой является использование операторов && и || практически во всех случаях оценки булевых логических выражений. Версии этих операторов & и | применяются только в битовой арифметике.

Тернарный оператор if-then-else

Общая форма оператора if-then-use такова:

выражение1? выражение2: выражениеЗ

В качестве первого операнда — «выражение1» — может быть исполь­зовано любое выражение, результатом которого является значение типа boolean. Если результат равен true, то выполняется оператор, заданный вторым операндом, то есть, «выражение2». Если же первый операнд paвен false, то выполняется третий операнд — «выражениеЗ». Второй и третий операнды, то есть «выражение2» и «выражениеЗ», должны воз­вращать значения одного типа и не должны иметь тип void.

В приведенной ниже программе этот оператор используется для про­верки делителя перед выполнением операции деления. В случае нулевого делителя возвращается значение 0.

public static void main(String args[]) <

Ссылка на основную публикацию
Логин и пароль для таобао
Последнее время оригинальный сайт Taobao.com отказывается пускать посетителей на свои страницы с товаром, вместо этого предлагая пройти авторизацию, то есть...
Корпус нокиа 6500 классик
Цена со скидкой Гарантия 6 месяцев Еще фото: Корпус высокого качества класса ААА, для сотового телефона Nokia 6500 Classic. Цвет,...
Корректировка стоимости номенклатуры при закрытии месяца ошибка
korrektirovka.jpg Похожие публикации С окончанием месяца подходит к концу и отчетный период, т. е. бухгалтеру предстоит подвести промежуточные итоги, оценить...
Логические операторы в java
Операторы в языке Java — это специальные символы, которые сообщают транслятору о том, что вы хотите выполнить операцию с некоторыми...
Adblock detector