Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
12.05.2015
Размер:
1.82 Mб
Скачать

Глава 4. Операции 101

Таблица 4.6. Применение логических операций

А

В

A|B

A&B

АЛВ

!A

false

false

false

false

false

true

true

false

true

false

true

false

false

true

true

false

true

true

true

true

true

true

false

false

Программа почти такая же, как в примере с классом BitLogic, показанном ранее, но оперирующая с логическими значениями типа boolean вместо двоичных битов:

// Демонстрирует операции булевой логики. • class BoolLogic (

public static void main(String args[]) {

boolean a = true;

boolean b = false; ч

boolean с = a | b;

boolean d = a & b;

boolean e = а Л b;

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

boolean g = !a;

System.out.printlnt" a = " + a)

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

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

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

System.out.println(" aAb = " + e)

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

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

После выполнения этой программы вы заметите, что те же логические пра­вила применяются как к booiean-значениям, так и к битам. Как можно ви­деть в следующем выводе, строковым представлением booiean-значений в Java является одно из постоянных значений — true или false:

а = true b = false а | b = true a&b = false аЛЬ = true a&bIa&!b = true !a = false

\Q2 Часть I. Язык Java

Короткие логические операции

Java обеспечивает две интересные булевские операции, которые нельзя най­ти в большинстве других машинных языков. Это вторые версии булевских операций И и ИЛИ, известные как укороченные (short-circuit) логические операции. Как можно видеть в предшествующей таблице, односимвольная операция ИЛИ приводит к true-результату, когда операнд а — true, незави­симо от того, каков операнд в. Точно так же операция И приводит к false-результату, когда а — false, независимо от того, каков в. Если вы исполь­зуете двухзначные (и и &&), а не однозначные (| и &) формы логических операций ИЛИ и И, Java вообще не будет выполнять оценку правого опе­ранда перед вычислением всего выражения, так как результат выражения определяется одним , левым операндом. Это полезно, когда правильное функционирование правого операнда зависит от того, является ли левый операнд true или false. Например, следующий кодовый фрагмент показы­вает, как вы можете воспользоваться преимуществом сокращения логиче­ской оценки, чтобы заранее обеспечить правильное выполнение операции деления (обходя любые оценки ее второго операнда во время выполнения):

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

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

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

if(с==1 & е++ < 100) d = 100;

Использование однозначной операции (&) гарантирует здесь, что операция инкремента будет применяться к е вне зависимости от того, равна перемен­ная с единице или нет.

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

Вы уже использовали операцию присваивания, начиная с главы 2. Теперь пришло время взглянуть на нее более формально. Операция присваивания (назначения) (assignment operator) — это одиночный знак равенства (=). Опе­рация присваивания работает в Java во многом так же, как в любом другом машинном языке. Она имеет следующую общую форму:

var = expression;

Соседние файлы в папке JavaLit