Что в си шарпе означает

В этом учебном пособии поочередно описываются арифметические, реляционные, логические, побитовые, присваивающие и другие операторы.

Арифметические операторы

Реляционные операторы

ОператорОписаниеПример
==Проверяет, равны ли значения двух операндов или нет, если да, то условие становится истинным.(A == B) не соответствует действительности.
знак равноПроверяет, равны ли значения двух операндов или нет, если значения не равны, условие становится истинным.(A! = B) истинно.
>Проверяет, превышает ли значение левого операнда значение правого операнда, если да, тогда условие становится истинным.(A> B) неверно.
=Проверяет, превышает ли значение левого операнда значение правого операнда, если да, тогда условие становится истинным.(A> = B) неверно.
>Двоичный оператор правого сдвига.Значение левых операндов перемещается вправо на количество бит, заданных правым операндом.A >> 2 = 15, что составляет 0000 1111

Операторы присваивания

Есть несколько других важных операторов, включая sizeof, typeof и ? :поддерживается C #.

StringReader r = obj как StringReader;

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

Приоритет оператора определяет группировку терминов в выражении. Это влияет на оценку выражения. Некоторые операторы имеют более высокий приоритет, чем другие; например, оператор умножения имеет более высокий приоритет, чем оператор сложения.

Например, x = 7 + 3 * 2; здесь x назначается 13, а не 20, потому что оператор * имеет более высокий приоритет, чем +, поэтому первая оценка выполняется для 3 * 2, а затем 7 добавляется в нее.

Источник

Арифметические операторы (справочник по C#)

Следующие операторы выполняют арифметические операции с операндами числовых типов:

Эти операторы поддерживаются всеми целочисленными типами и типами с плавающей запятой.

Оператор инкремента ++

Оператор инкремента ++ увеличивает операнд на 1. Операндом должна быть переменная, свойство или индексатор.

Оператор инкремента поддерживается в двух формах: постфиксный оператор инкремента ( x++ ) и префиксный оператор инкремента ( ++x ).

Постфиксный оператор приращения

Результатом x++ является значение x перед выполнением операции, как показано в следующем примере:

Префиксный оператор инкремента

Результатом ++x является значение x после выполнения операции, как показано в следующем примере:

Постфиксный оператор уменьшения

Результатом x— является значение x перед выполнением операции, как показано в следующем примере:

Префиксный оператор декремента

Операторы унарного плюса и минуса

Оператор умножения *

Оператор умножения * вычисляет произведение операндов:

Оператор деления /

Оператор деления / делит левый операнд на правый.

Деление целых чисел

Для операндов цельночисленных типов результат оператора / является целочисленным типом, который равен частному двух операндов, округленному в сторону нуля:

Деление чисел с плавающей запятой

Оператор остатка %

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

Целочисленный остаток

Используйте метод Math.DivRem для вычисления результатов как целочисленного деления, так и определения остатка.

Остаток с плавающей запятой

Этот метод вычисления остатка аналогичен тому, который использовался для целочисленных операндов, но отличается от спецификации IEEE 754. Если вам нужна операция вычисления остатка, которая соответствует спецификации IEEE 754, используйте метод Math.IEEERemainder.

Сведения о поведение оператора % в случае неконечных операндов см. в разделе Оператор остаткаспецификации языка C#.

Для операндов decimal оператор остатка % эквивалентен оператору остатка типа System.Decimal.

В следующем примере показано поведение оператора остатка для операндов с плавающей запятой:

Оператор сложения +

Оператор сложения + вычисляет сумму своих операндов:

Составное присваивание

Для бинарного оператора op выражение составного присваивания в форме

за исключением того, что x вычисляется только один раз.

Следующий пример иллюстрирует использование составного присваивания с арифметическими операторами:

Приоритет и ассоциативность операторов

В следующем списке перечислены арифметические операторы в порядке убывания приоритета:

Бинарные арифметические операторы имеют левую ассоциативность. То есть операторы с одинаковым приоритетом вычисляются в направлении слева направо.

Порядок вычисления, определяемый приоритетом и ассоциативностью операторов, можно изменить с помощью скобок ( () ).

Полный список операторов C#, упорядоченный по уровню приоритета, можно найти в разделе Приоритет операторов статьи Операторы C#.

Арифметическое переполнение и деление на нуль

Если результат арифметической операции выходит за пределы диапазона возможных конечных значений соответствующего числового типа, поведение арифметического оператора зависит от типа его операндов.

Целочисленное арифметическое переполнение

Деление целого числа на ноль всегда вызывает исключение DivideByZeroException.

В случае целочисленного арифметического переполнения итоговое поведение определяется контекстом проверки переполнения, который может быть проверяемым или непроверяемым:

По умолчанию арифметические операции выполняются в непроверяемом контексте.

Арифметическое переполнение с плавающей запятой

Арифметические операции с типами float и double никогда не вызывают исключение. Результатом арифметических операций с этими типами может быть одно из специальных значений, представляющих бесконечность и объект, не являющийся числовым:

Для операндов типа decimal арифметическое переполнение всегда вызывает исключение OverflowException, а деление на нуль всегда вызывает исключение DivideByZeroException.

Ошибки округления

Из-за общих ограничений, касающихся представления вещественных чисел в форме с плавающей запятой и арифметических операций с плавающей запятой, при вычислениях с использованием типов с плавающей запятой могут возникать ошибки округления. То есть полученный результат выражения может отличаться от ожидаемого математического результата. В следующем примере показано несколько таких случаев:

См. заметки в справочной документации по System.Double, System.Single и System.Decimal.

Возможность перегрузки оператора

Спецификация языка C#

Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:

Источник

Оператор => (справочник по C#)

Токен => поддерживается в двух формах: в виде лямбда-оператора и в виде разделителя имени члена и реализации члена в определении тела выражения.

Лямбда-оператор

В лямбда-выражениях лямбда-оператор => используется для отделения входных параметров с левой стороны от тела лямбда-выражения с правой стороны.

В следующих примерах используется функция LINQ с синтаксисом метода для демонстрации применения лямбда-выражений:

Входные параметры лямбда-выражений строго типизируются во время компиляции. Если компилятор может выводить типы входных параметров, как в предыдущем примере, вы можете опустить объявления типа. Если требуется указать тип входных параметров, это необходимо делать для каждого такого параметра, как показано в следующем примере:

В следующем примере показано, как определить лямбда-выражение без входных параметров:

Дополнительные сведения см. в разделе Лямбда-выражения.

Определения тела выражения

Определение тела выражения имеет следующий общий синтаксис:

где expression — любое допустимое выражение. Тип возвращаемого значения expression должен быть неявно преобразуемым в тип возвращаемого значения элемента. Если элемент:

то expression должен быть выражением оператора. Поскольку результат выражения отбрасывается, возвращаемым типом этого выражения может быть любой тип.

В следующем примере приводится определение тела выражения для метода Person.ToString :

Это сокращенная версия следующего определения метода:

Начиная с версии C# 6, поддерживаются определения тела выражения для методов, операторов и доступных только для чтения свойств. Начиная с версии C# 7.0, поддерживаются определения тела выражения для конструкторов, методов завершения, методов доступа свойств и индексаторов.

Дополнительные сведения см. в разделе Элементы, воплощающие выражение.

Источник

Логические операторы (справочник по C#)

Следующие операторы выполняют логические операции с использованием логических операндов:

Оператор логического И &

В следующем примере правый операнд оператора & является вызовом метода, который выполняется независимо от значения левого операнда:

Для операндов целочисленных типов оператор & вычисляет побитовое логическое И своих операндов. Унарный оператор & является оператором AddressOf.

Оператор логического исключения ИЛИ ^

Для операндов целочисленных типов оператор ^ вычисляет побитовое исключающее ИЛИ своих операндов.

Оператор логического ИЛИ |

В следующем примере правый операнд оператора | является вызовом метода, который выполняется независимо от значения левого операнда:

Для операндов целочисленных типов оператор | вычисляет побитовое логическое ИЛИ своих операндов.

Условный оператор логического И &&

В следующем примере правый операнд оператора && является вызовом метода, который не выполняется, если левый операнд имеет значение false :

Оператор логического И & также вычисляет логическое И для своих операндов, но он всегда вычисляет оба операнда.

Условный оператор логического ИЛИ ||

В следующем примере правый операнд оператора || является вызовом метода, который не выполняется, если левый операнд имеет значение true :

Оператор логического ИЛИ | также вычисляет логическое ИЛИ для своих операндов, но всегда вычисляет оба операнда.

Операторы, допускающие логическое значение NULL

Для операндов bool? операторы & (логическое И) и | (логическое ИЛИ) поддерживают следующую логику с тремя значениями:

Эта семантика описывается в следующей таблице:

xyx&yx|y
truetruetruetrue
truefalsefalsetrue
truenullnulltrue
falsetruefalsetrue
falsefalsefalsefalse
falsenullfalsenull
nulltruenulltrue
nullfalsefalsenull
nullnullnullnull

Составное присваивание

Для бинарного оператора op выражение составного присваивания в форме

за исключением того, что x вычисляется только один раз.

Условные логические операторы && и || не поддерживают составное присваивание.

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

В следующем списке перечислены логические операторы в порядке убывания приоритета:

Порядок вычисления, определяемый приоритетом операторов, можно изменить с помощью скобок ( () ).

Полный список операторов C#, упорядоченный по уровню приоритета, можно найти в разделе Приоритет операторов статьи Операторы C#.

Возможность перегрузки оператора

Спецификация языка C#

Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:

Источник

Операторы и выражения для доступа к элементам (справочник по C#)

При получении доступа к элементу типа можно использовать следующие операторы и выражения:

Выражение доступа к члену

Оператор индексатора []

Доступ к массиву

В приведенном ниже примере показано, как получить доступ к элементам массива.

Если индекс массива выходит за границы соответствующего измерения массива, возникает исключение IndexOutOfRangeException.

Как показано в предыдущем примере, квадратные скобки также используются в объявлении типа массива и для создания экземпляров массива.

Дополнительные сведения см. в руководстве по работе с массивами.

Доступ к индексатору

Индексаторы позволяют индексировать экземпляры определяемого пользователем типа аналогично индексации массива. В отличие от индексов массива, которые должны быть целым числом, параметры индексатора могут быть объявлены любым типом.

Другие данные об использовании []

Сведения о доступе к элементу указателя см. в разделе, посвященном оператору доступа к элементу указателя [], статьи Операторы, связанные с указателем.

Кроме того, с помощью квадратных скобок можно указывать атрибуты.

Если a принимает значение, отличное от NULL, результат a?.x или a?[x] совпадает с результатом a.x или a[x] соответственно.

Если параметр A может быть пустым, а B и C нет, если A не является пустым, необходимо только применить условный оператор NULL к параметру A :

Потокобезопасный вызов делегата

Этот код эквивалентен следующему коду, который будет использоваться в C# 5 или более ранней версии:

Выражения вызова ()

Приведенный ниже пример демонстрирует вызов делегата и метода с аргументами или без них.

Другие данные об использовании ()

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

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

Индекс от конца: оператор ^

Можно также использовать оператор ^ с оператором диапазона для создания диапазона индексов. См. сведения в руководстве по диапазонам и индексам.

В предыдущем примере выражение a..b имеет тип System.Range. В выражении a..b результаты a и b должны быть неявно преобразованы в int или Index.

Возможность перегрузки оператора

Спецификация языка C#

Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:

См. сведения о индексах и диапазонах в примечании к функциям.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *