Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Булевские логические операции. Замыкающие логические операции. Операция присваивания. Булевские логические операции




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

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

· & Логическое AND (И)

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

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

· || Замыкающее OR

· BookNew_JAVA-7. indb 107 02. 06. 2007 1: 06: 42

· 108 Часть I. Язык Java

· Операция Описание

· & & Замыкающее AND

·! Логическое унарное NOT (НЕ)

· & = AND с присваиванием

· |= OR с присваиванием

· ^= XOR с присваиванием

· == Равно

·! = Не равно

·?: Тернарная операция if-then-else

Логические булевские операции &, | и ^ действуют применительно к значениям типа boolean точно так же, как они действуют по отношению к битам целочисленных значений. Логическая операция! инвертирует булевское состояние: ! true == false и! false == true.

Ниже приведена программа, которая выполняет практически те же действия, что и пример программы BitLogic, представленный ранее, но она работает с логическими значениями типа boolean, а не с двоичными разрядами.

// Демонстрация применения булевских логических операций.

class BoolLogic {

public static void main(String args[]) {

boolean a = true;

boolean b = false;

boolean c = a | b;

boolean d = a & b;

boolean e = a ^ b;

boolean f = (! a & b) | (a & ! b);

boolean g =! a;

System. out. println(" a = " + a);

System. out. println(" b = " + b);

System. out. println(" a|b = " + c);

System. out. println(" a& b = " + d);

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

System. out. println("! a& b|a&! b = " + f);

System. out. println(" ! a = " + g);

}

}

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

Замыкающие логические операции

Java предоставляет две интересные булевских операции, не встречающиеся во многих других языках программирования. Это вторые версии булевских операций AND и OR, получившие название замыкающих логических операций. Как видно из ранее приведенной таблицы, результат выполнения операции OR равен true, когда значение операнда A равно true, независимо от значения операнда B. Аналогично, результат выполнения операции AND равен false, когда значение операнда A равно false, независимо от значения операнда B. При использовании форм || и & & этих операций вместо | и & программа Java не будет вычислять значение правого операнда, если результат выражения можно определить по значению одного левого операнда. Это свойство очень удобно в тех случаях, когда значение правого операнда зависит от значения левого. Например, следующий фрагмент кода демонстрирует преимущество применения замыкающей логической операций для выяснения допустимости операции деления перед вычислением ее результата:

if (denom! = 0 & & num / denom > 10)

Благодаря применению замыкающей формы операции AND (& & ) исключается риск возникновения исключения времени выполнения в случае равенства знаменателя (denom) нулю. Если бы эта строка кода была записана с применением одинарного символа & операции AND, программа вычисляла бы обе части выражения, что приводило бы к исключению времени выполнения при равенстве значения denom нулю.

Замыкающие формы операций AND и OR принято применять в тех случаях, когда требуется использование операций булевской логики, а односимвольные версии – исключительно для побитовых операций. Однако существуют исключения из этого правила. Например, рассмотрим следующий оператор:

if(c==1 & e++ < 100) d = 100;

В данном случае одиночный символ & гарантирует применение операции инкремента к значению e независимо от равенства 1 значения c.

Операция присваивания

Мы использовали операцию присваивания, начиная с главы 2. Теперь пора рассмотреть эту операцию формально. Символом операции присваивания служит одиночный знак равенства, =. В Java операция присваивания работает аналогично тому, как она работает во многих компьютерных языках. Она имеет следующую общую форму:

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

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

int x, y, z;

x = y = z = 100;

В этом фрагменте кода единственный оператор устанавливает значения трех переменных x, y и z равными 100. Это обусловлено тем, что = – операция, которая использует значение правого выражения. Таким образом, значение выражения z=100 равно 100, которое затем присваивается переменной y, а затем – переменной x. Использование “цепочки присваивания” – удобный способ установки общего значения группы переменных.

Операция?

Синтаксис Java содержит специальную тернарную операцию, которой можно заменять определенные типы операторов if-then-else. Это операция?. Вначале она может казаться несколько непонятной, но со временем вы убедитесь в ее исключительной эффективности. Эта операция имеет следующую общую форму:

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

Здесь выражение1 – любое выражение, приводящее к значению типа boolean. Если значение выражения1 – true, программа вычисляет значение выражения2. В противном случае программа вычисляет значение выражения3. Результат выполнения операции? равен значению вычисленного выражения. И выражение2, и выражение3 должны возвращать значение одного и того же типа, которым не может быть тип void.

Следующий пример программы демонстрирует применение операции?. Эта программа служит для получения абсолютного значения переменной.

// Демонстрация использования операции?.

class Ternary {

public static void main(String args[]) {

int i, k;

i = 10;

k = i < 0? -i: i; // получение абсолютного значения переменной i

System. out. print(" Абсолютное значение " );

System. out. println(i + " равно " + k);

i = -10;

k = i < 0? -i: i; // получение абсолютного значения переменной i

System. out. print(" Абсолютное значение " );

System. out. println(i + " равно " + k);

}

}

Эта программа генерирует следующий вывод:

Абсолютное значение 10 равно 10

Абсолютное значение -10 равно 10

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...