На этом шаге мы перечислим эти операторы и рассмотрим особенности их использования.
Далее мы рассмотрим основные операторы, используемые в языке С#. Начнем с арифметических операторов, используемых при выполнении арифметических операций. Вообще же все операторы в языке C# обычно разделяют на четыре группы:
Также в языке C# есть тернарный оператор. Да и оператор присваивания не такой простой, как может показаться на первый взгляд. Все эти вопросы мы обязательно обсудим. Ну а пока - арифметические операторы.
Назначение большинства арифметических операторов интуитивно понятно каждому, кто хотя бы в минимальном объеме сталкивался с математикой. В таблице 1 представлен полный перечень арифметических операторов языка С#. Там же дано краткое их описание.
Оператор | Описание |
---|---|
+ | Оператор сложения. Значением выражения вила А+В является сумма значений переменных А и В |
- | Оператор вычитания. Значением выражения вида A-В является разность значений переменных А и В |
* | Оператор умножения. Значением выражения вида А*В является произведение значений переменных А и В |
/ | Оператор деления. Значением выражения вида A/В является частное значений переменных А и B. Если оба операнда А и B целочисленные, то деление выполняется нацело. Для выполнения обычного деления с целочисленными операндами перед выражением указывают инструкцию (double) |
% | Оператор вычисления остатка отделения. Значением выражения вида А%В является остаток от целочисленного деления переменных А и В |
++ | Оператор инкремента. При выполнении команды вида А++ или ++А значение переменной А увеличивается на 1 |
-- | Оператор декремента. При выполнении команды вида А-- или --А значение переменной А уменьшается на 1 |
Описание операторов дано в предположении, что операнд (или операнды) является числовым. Вместе с тем это не всегда так. Так, в операции сложения с использованием оператора + один или оба операнда могут быть, например, текстовыми. В таком случае выполняется объединение текстовых строк. Скажем, если к тексту прибавить число, то числовой операнд автоматически преобразуется в текстовый формат и результатом выражения является текст, получающийся объединением "суммируемых" текстовых фрагментов.
Имеет свои особенности и оператор деления. Дело в том, что если делить два целых числа, то выполняется целочисленное деление. Например, результатом выражения 12/5 будет не 2.4, как можно было бы ожидать, а целое число 2 (целая часть от деления 12 на 5). Но вот результат выражения 12.0/5 или 12/5.0 - это число 2.4. Объяснение простое: в выражении 12/5 оба операнда целочисленные, а в выражениях 12.0/5 и 12/5.0 целочисленный только один операнд. Поэтому в выражении 12/5 речь идет о целочисленном делении, а значения выражений 12.0/5 и 12/5.0 вычисляются с использованием обычного деления. Если а и b - целочисленные переменные (например, типа int), то при вычислении выражения а/b используется целочисленное деление. Если нужно, чтобы деление было обычным, используют команду вида (double)а/b.
Оператор % позволяет вычислить остаток от целочисленного деления. Причем операнды могут быть не только целыми, но и действительными числами. В таком случае результатом выражения вида А%В может быть не только целое, по и действительное число.
Если А и B - целочисленные переменные, то результат выражения A%B совпадает с разностью значений переменной А и выражения В*(A/В) (то есть значения выражений А%В и A-В*(A/В) в этом случае совпадают).
Если все предыдущие операторы (+,*, / и %) были бинарными, то операторы инкремента ++ и декремента - являются унарными - они используются с одним, а не с двумя операндами. У каждого из этих операторов есть префиксная и постфиксная формы: в префиксной форме операторы инкремента и декремента указываются перед оператором (например, ++А или --А), а в постфиксной форме сначала указывается операнд, а затем - оператор (например, А++ или А--). В плане влияния на значение операнда префиксная и постфиксная формы эквивалентны. При выполнении команды вида ++А или А++ значение переменной А увеличивается на 1. Команда вида --А и А-- означает уменьшение значения переменной А на 1. Но разница между префиксными и постфиксными формами все же есть. Дело в том, что выражения вида ++А, А++, --А и А-- имеют значения. Проше говоря, инструкцию ++А или, скажем, А-- мы можем интерпретировать как некоторое число (если операнд А числовой). То есть, помимо прямых последствий для операнда, само выражение на основе оператора инкремента или декремента может использоваться в более сложном выражении. Правило такое: значением выражения с оператором инкремента или декремента в префиксной форме является новое (измененное) значение операнда, а значением выражения с оператором инкремента или декремента в постфиксной форме является старое (до изменения) значение операнда. Например, командой int А=10, В объявляются две переменные А и В, и переменная А получает значение 10. Если затем выполняется команда В=А++, то переменная В получит значение 10, а значение переменной А станет равным 11. Почему? Потому что при выполнении инструкции А++ значение переменной А увеличивается на 1 и становится равным 11. Но переменной В значением присваивается не значение переменной А, а значение выражения А++. Значение выражения А++, поскольку использована постфиксная форма оператора инкремента, - это старое (исходное) значение переменной А (то есть значение 10). А вот если бы мы вместо команды В=А++ использовали команду В=++А, то и переменная А, и переменная В получили бы значение 11. Причина в том, что значением выражения ++А с оператором инкремента в префиксной форме является новое значение переменной А (число 11).
При выполнении арифметических операций, помимо числовых операндов, могут использоваться и символьные значения (значения типа char). В таком случае выполняется автоматическое преобразование значения типа char в числовое значение (используется код соответствующего символа из кодовой таблицы). В этом смысле мы вполне можем вычислить, например, разность 'D'-'А' (результат равен 3 - разность кодов символов 'D' и 'А').
Значение выражения symb+1 - число 66, которое является кодом символа 'В' в кодовой таблице. Результат выражения symb+1 явно приводится к символьному виду, и полученное число интерпретируется как код символа. В результате значением переменной symb будет символ 'В'.
А вот если мы воспользуемся выражением symb++ (или ++symb), то значение переменной symb станет равным 'В'. Дело в том, что в плане последствий для операнда А выражение А++ (или ++А) эквивалентно команде вида А=(тип А)(А+1). То есть к исходному значению операнда А прибавляется единица, полученный результат приводится к типу операнда А, и это значение присваивается операнду А. Если операнд А - числовой, то факт приведения типа не столь важен. Но вот если операнд символьный - то момент с приведением типа важен. Это же замечание относится и к оператору декремента.
На следующем шаге мы рассмотрим операторы сравнения.