Урок 6. Арифметические операторы C#


Все уроки по C# расположены здесь.

На этом уроке мы рассмотрим основные арифметические операции, доступные C# программистам. Эти операторы позволяют выполнять общие алгебраические операции со значениями числовых типов данных.

Вывод числовых значений

Прежде чем начнем рассмотрение арифметических операторов, мы завернем немного в сторону. До сих пор в учебнике по основам C# не обсуждался вывод числовых значений на экран. Когда мы начинаем изменять значения переменных, то мы должны иметь возможность просматривать результаты операций.

На первом уроке нашего на C# учебника, мы создали консольное приложение и выводили текст с помощью консоли - Console.WriteLine. Она также может быть использована для вывода числовых данных. Например

int z = 5;
Console.WriteLine(z);    // выводит 5
Вы можете использовать Console.WriteLine для проверки примеров в следующих разделах.

Основные арифметические операторы

В C# доступно пять основных арифметических операторов. Они используются для сложения (+), вычитания (-), умножения (*), деления (/) и модуля (%). Из них первые четыре доступны почти для каждого языка программирования. Вот несколько простых примеров

int a = 6;
int b = 3;
int r;
 
r = a + b;         // r = 9
r = a - b;         // r = 3
r = a * b;         // r = 18
r = a / b;         // r = 2
r = a + b - 1;     // r = 8
Важно помнить, что полученное значение в результате математической операции будет соответствующим типу данных принимающей переменной. Результат операции деления может дать значение с плавающей точкой. Однако если целочисленное значение присвоено, дробная часть будет потеряна. Не менее важным и менее очевидным является результат операции, выполняемой с несколькими целыми числами и присваиваемый нецелому. В этом случае результат вычисляется как целое число перед неявным преобразованием. Это означает, что, хотя результирующее значение назначается переменной с плавающей точкой, дробная часть все еще усекается, если только сначала явно не преобразовано хотя бы одно из значений. Следующие примеры иллюстрируют это

int a = 7;
int b = 3;
int integerR;
float floatR;
 
integerR = a / b;          // integerR = 2  (усечено)
floatR = a / b;            // floatResult = 2.0  (усечено)
floatR = (float)a / b;     // floatR = 2.33333325
Последним из пяти арифметических операторов является модуль. Этот оператор возвращает значение, равное остатку целочисленного деления. Например, когда десять делится на три, ответ будет три, а остальные - один. Оператор модуля можно использовать со всеми числовыми типами данных.

int a = 10;
int b = 3;
float c = 3.5F;
int integerR;
float floatR;
 
integerR = a % b;          // integerR = 1
floatR = a % b;            // floatR = 1.0
floatR = a % c;            // floatR = 3.0
Операторы инкремента и декремента

C# предоставляет два оператора, которые можно использовать для увеличения или уменьшения значения переменной на единицу. Это оператор инкремента ( ++ ) и оператор декремента (--). Эти операторы называются унарными операторами, поскольку они применяются в одном значении. Операторы могут быть размещены перед переменной (префикс) или после нее (постфикс).

// Все эти команды прибавляют единицу к "a"
a = a + 1;
++a;        // prefix
a++;        // postfix
 
// Все эти команды уменьшают на единицу переменную "a"
a = a - 1;
--a;
a--;
Из приведенных выше примеров следует, что префиксные и постфиксные операторы дают одинаковые результаты. Это верно в рассмотренных до сих пор простых сценариях. Однако, когда операторы используются как часть более сложного выражения, существует важное различие. Если используется префикс, то операция инкремента или декремента применяется до того, как значение переменной будет применено к остальной части вычисления. Если используется постфиксная версия, то после этого значение изменяется.

int a;
int b;
 
// Префикс.  a  увеличивается, прежде чем её значение присваивается  b
a = 10;
b = ++a;        //a = 11, b = 11;
 
// Постфикс.  a  увеличивается, после того, как её значение присваивается  b
a = 10;
b = a++;        //a = 11, b = 10;
Приоритет операторов

Операторы, описанные в этой статье, могут использоваться вместе в одном выражении. Результат выражения зависит от порядка применения операторов. Этот порядок определяется приоритетом операторов, которые применяет значение для каждого оператора.

В течение следующих нескольких статей мы построим таблицу приоритета операторов C#. Для операторов, описанных до сих пор, порядок очередности выглядит следующим образом

Приоритет операторов

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

int a = 10;
int b = 6;
int c = 2;
int r;
 
// * применяется перед +
r = a + b * c;             //r = 22
 
// / применяется перед -
r = a - b / c;             //r = 7
 
// Очередность *, /, +, -
r = a * b + b / c - 1;     //r = 62
Оператор скобок

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

int a = 10;
int b = 6;
int c = 2;
int r;
 
r = (a + b) * c;             //r = 32
 
r = (a - b) / c;             //r = 2
 
r = a * (b + b / (c - 1));   //r = 120
Предыдущий: Урок 5. Приведение числовых типов данных в C# | Следующий: Урок 7. Составные операторы присваивания C#
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, Уроки по си шарп, си шарп, типы данных




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




Измерительное оборудование Testo
Подключение к sql-серверу и асинхронность
Работа с архивами в C++: часть первая