KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Герберт Шилдт - C# 4.0: полное руководство

Герберт Шилдт - C# 4.0: полное руководство

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Герберт Шилдт, "C# 4.0: полное руководство" бесплатно, без регистрации.
Перейти на страницу:

*          Умножение

/          Деление

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

—          Декремент

++         Инкремент


Операторы +,    *    и / действуют так, как предполагает их обозначение. Их можно применять к любому встроенному числовому типу данных.

Действие арифметических операторов не требует особых пояснений, за исключением следующих особых случаев. Прежде всего, не следует забывать, что когда оператор / применяется к целому числу, то любой остаток от деления отбрасывается; например, результат целочисленного деления 10/3 будет равен 3. Остаток от этого деления можно получить с помощью оператора деления по модулю (%), который иначе называется оператором вычисления остатка. Он дает остаток от целочисленного деления. Например, 10 % 3 равно 1. В C# оператор % можно применять как к целочисленным типам данных, так и к типам с плавающей точкой. Поэтому 10.0 % 3.0 также равно 1. В этом отношении C# отличается от языков С и C++, где операции деления по модулю разрешаются только для целочисленных типов данных. В приведенном ниже примере программы демонстрируется применение оператора деления по модулю.


// Продемонстрировать применение оператора %.

using System;

class ModDemo {

  static void Main() {

    int iresult, irem;

    double dresult, drem;

    iresult = 10 / 3;

    irem = 10 % 3;

    dresult = 10.0 / 3.0;

    drem = 10.0 % 3.0;

    Console.WriteLine("Результат и остаток от деления 10/3: "

           + iresult + " " + irem);

    Console.WriteLine("Результат и остаток от деления 10.0 / 3.0: "

           + dresult + " " + drem);

  }

}


Результат выполнения этой программы приведен ниже.


Результат и остаток от деления 10/3: 3 1

Результат и остаток от деления 10.0 / 3.0: 3.33333333333333 1


Как видите, обе операции, % целочисленного типа и с плавающей точкой, дают один и тот же остаток, равный 1.


Операторы инкремента и декремента

Операторы инкремента (++) и декремента (—) были представлены в главе 2. Как станет ясно в дальнейшем, они обладают рядом особых и довольно интересных свойств. Но сначала выясним основное назначение этих операторов.

Оператор инкремента увеличивает свой операнд на 1, а оператор декремента уменьшает операнд на 1. Следовательно, оператор


х+ + ;


равнозначен оператору х = х + 1; а оператор


х--;


равносилен оператору


х = х - 1;


Следует, однако, иметь в виду, что в инкрементной или декрементной форме значение переменной х вычисляется только один, а не два раза. В некоторых случаях это позволяет повысить эффективность выполнения программы.

Оба оператора инкремента и декремента можно указывать до операнда (в префиксной форме) или же после операнда (в постфиксной форме). Например, оператор


х = х + 1;


может быть записан в следующем виде:


++х; // префиксная форма


или же в таком виде:


х++; // постфиксная форма


В приведенном выше примере форма инкремента (префиксная или постфиксная) особого значения не имеет. Но если оператор инкремента или декремента используется в длинном выражении, то отличие в форме его записи уже имеет значение. Когда оператор инкремента или декремента предшествует своему операнду, то результатом операции становится значение операнда после инкремента или декремента. А когда оператор инкремента или декремента следует после своего операнда, то результатом операции становится значение операнда до инкремента или декремента. Рассмотрим следующий фрагмент кода.


х = 10;

у = ++х;


В данном случае значение переменной у будет установлено равным 11, поскольку значение переменной х сначала увеличивается на 1, а затем присваивается переменной у. Но во фрагменте кода


х = 10;

у = х++;


значение переменной у будет установлено равным 10, так как в этом случае значение переменной х сначала присваивается переменной у, а затем увеличивается на 1. В обоих случаях значение переменной х оказывается равным 11. Отличие состоит лишь том, когда именно это значение станет равным 11: до или после его присваивания переменной у.

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


// Продемонстрировать отличие между префиксной

// и постфиксной формами оператора инкремента (++).

using System;

class PrePostDemo {

  static void Main() {

    int x, y;

    int i;


    x = 1;

    y = 0;

    Console.WriteLine("Ряд чисел, полученных " +

              "с помощью оператора у = у + х++;");

    for(i = 0; i < 10; i++)    {

      y = y + x++;    // постфиксная форма оператора ++

      Console.WriteLine(y + " ");

    }

    Console.WriteLine();

    x = 1;

    y = 0;

    Console.WriteLine("Ряд чисел, полученных    " +

              "с помощью оператора у = у + ++х;");

    for(i = 0; i < 10; i++)    {

      y = y + ++x;    // префиксная форма оператора ++

      Console.WriteLine(y + " ");

    }

    Console.WriteLine();

  }

}


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


Ряд чисел, полученных с помощью оператора у = у + х++

1

3

б

10

15

14

21

28

36

45

55


Ряд чисел, полученных с помощью оператора у = у + ++х;

2

5

9

14

20

27

35

44

54

65


Как подтверждает приведенный выше результат, в операторе


у = у + х++;


первоначальное значение переменной х складывается с самим собрй, а полученный результат присваивается переменной у. После этого значение переменной х увеличивается на 1. Но в операторе


у = у + ++;


значение переменной х сначала увеличивается на 1, затем складывается с первоначальным значением этой же переменной, а полученный результат присваивается переменной у. Как следует из приведенного выше результата, простая замена префиксной формы записи оператора ++х постфиксной формой х++ приводит к существенному изменению последовательного ряда получаемых чисел.

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


у + ++х;


Такое расположение рядом двух операторов может показаться не совсем привычным, но компилятор воспримет их в правильной последовательности. Нужно лишь запомнить, что в данном выражении значение переменной у складывается с увеличенным на 1 значением переменной х.


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

В обозначениях оператор отношения и логический оператор термин отношения означает взаимосвязь, которая может существовать между двумя значениями, а термин логический — взаимосвязь между логическими значениями "истина7' и "ложь". И поскольку операторы отношения дают истинные или ложные результаты, то они нередко применяются вместе с логическими операторами. Именно по этой причине они и рассматриваются совместно в данном разделе.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*