Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Русский_Проект: Изучение Visual Basic C#. Учебный курс


C#. Учебный курс

Здравствуйте, программисты! Сегодня у нас двенадцатое занятие, на котором мы поговорим об операторах сравнения и логических операторах.

Операторы сравнения и логические операторы

Оператор сравнения позволяет оценить одно значение с другим. Вот таблица операторов сравнения:

==равно
!=не равно
>больше чем
<меньше чем
>=больше или равно
<=меньше или равно

Результатом выполнения операторов сравнения являются значения типа bool. Операторы ==, != могут применяться ко всем объектам для их сравнения на предмет равенства или неравенства. Операторы сравнения <, >, <=, >= применимы только к перечисляемым типам данных, которые упорядочены в своей структуре, то есть к числовым типам данных. Значения типа bool можно сравнивать только на предмет равенства или неравенства, поскольку значения true и false не являются упорядоченными типами, как в других языках, где true равен 1, а false равен 0. Поэтому выражение true > false просто не имеет смысла.

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

Логические операторы позволяют проверить истинность или ложность выражения (true или false). Так как операторы сравнения возвращают булевы значения true или false, то логические операторы часто используются в связке с операторами сравнения. Вот список логические операторов:

&AND (И)
|OR (или)
^XOR (исключающее или)
&&short-circuit AND (быстрый оператор И)
||short-circuit OR (быстрый оператор ИЛИ)
!NOT (Не)

Результатом выполнения логических операторов являются значения типа bool.

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

Кроме обычных логических операторов AND и OR, существуют быстрые логические операторы, использование которых увеличивает скорость выполнения программы. Суть в следующем - если при выполнении оператора AND первый операнд имеет значение false, то результат сравнения будет равен false, независимо от значения второго оператора. Аналогично, если при выполнении оператора OR первый операнд имеет значение true, то результатом будет значение true, независимо от значения второго операнда. Получается, что нет необходимости оценивать второй операнд, а значит сокращается время на вычисления.

Быстрый оператор AND обозначается двумя символами амперсанда &&, а быстрый оператор OR - двумя вертикальными черточками ||. Раздница между быстрыми и обычной версиями операторов и заключается в том, что при использовании обычных логических операторов всегда оценивают первый и второй операнд, а быстрый оператор проверяет второй операнд только при необходимости.

Пример

Приведем пример применения быстрого и обычного оператора AND. Предположим, нам надо написать программу, которая определяет, является ли значение переменной y кратной значению переменной x. Для этого используется оператор взятия по модулю. Если остаток деления равен 0, то значение переменной y является делителем значения переменной x. Так как в примере используется деление, то нужно предусмотреть случай недопущения деления на ноль:

// Пример использования быстрого и обычного оператора AND

using System;

class AND_Sample
{
    public static void Main()
    {
        int y, x;
        y = 5;
        x = 25;

        if(y != 0 && (x % y) == 0)
            Console.WriteLine(y + " является делителем числа " + x);
       
        // Теперь присвоим переменной y значение 0
        y = 0;
        // Повторяем код для вывода сообщения
        if(y != 0 && (x % y) == 0)    
        Console.WriteLine(y + " является делителем числа " + x);

        // Теперь вместо быстрого оператора AND будем использовать обычный AND
        if(y != 0 & (x % y) == 0)
        Console.WriteLine(y + " является делителем числа " + x);
    }
}

В этом примере используется три варианта деления одного числа на другое. И в каждом случае происходит разное выполнение программы. В первом случае мы проверяем, не равно ли значение y нолю. Если равно, то быстрый оператор AND останавливает выполнение оператора и деление по модулю не выполняется. Так как в первом случае значение равно 5, то деление по модулю выполняется. Во втором случае мы сами присваиваем переменной значение 0 и операция деления по модулю не выполняется, в результате чего предотвращается деление на 0. А в третьем случае мы используем обычный AND. Так как при этом оцениваются оба операнда, то тут же возникает ошибка выполнения программы при попытке деления на ноль.

Возникает резонный вопрос: А зачем тогда использовать обычный AND, если быстрый AND более эффективен? Дело в том, что иногда в операторах AND или OR требуется оценить оба операнда.

Visual Basic 6.0

Добавил новые примеры, которые будут доступны с этой страницы в течение недели.
serpent200.zip - змея, которая ползает по экрану. Две версии.
statusbar_progress_indicators_above.zip - помещаем индикатор прогресса поверх строки состояния

Удачного вам программирования!


©2007 А.Климов
Русский_Проект

В избранное