Операции отношения стоит просто перечислить, в объяснениях они не нуждаются. Всего операций 6 (==, !=, <, >, <=, >= ), все они возвращают результат логического типа bool. Операции перегружены, так что их операнды могут быть разных типов. Понятно, что перед вычислением отношения может потребоваться преобразование типа одного из операндов. Понятно, что не всегда возможны неявные преобразования, гарантирующие возможность выполнения сравнения. Возникнет ошибка на этапе компиляции в выражении:
1 > "1"
Задав явное преобразование типа для одного из операндов, это отношение можно вычислить. Следует обратить внимание на запись отношения эквивалентности, задаваемое двумя знаками равенства. Типичной ошибкой является привычная для математики запись:
if(a = b)
Выражение в скобках синтаксически корректно и воспринимается, как запись операции присваивания, допустимой в выражениях. К счастью, в большинстве случаев возникнет ошибка на этапе компиляции при попытке преобразования значения операнда b к типу bool. Но, если a и b - переменные логического типа, то никаких сообщений об ошибке выдаваться не будет, хотя результат выполнения может быть неправильным.
Операции проверки типов is и as будут рассмотрены в последующих лекциях.
Операции сдвига вправо ">>" и сдвига влево "<<" в обычных вычислениях применяются редко. Они особенно полезны, если данные рассматриваются, как строка битов. Результатом операции является сдвиг строки битов влево или вправо на K разрядов. В применении к обычным целым положительным числам сдвиг вправо равносилен делению нацело на , а сдвиг влево - умножению на . Для отрицательных чисел сдвиг влево и деление дают разные результаты, отличающиеся на 1. В языке C# операции сдвига определены только для некоторых целочисленных типов - int, uint, long, ulong. Величина сдвига должна иметь тип int. Вот пример применения этих операций:
/// <summary> ///операции сдвига /// </summary> public void Shift() { int n = 17,m =3, p,q; p= n>>2; q = m<<2; Console.WriteLine("n= " + n + "; m= " + m + "; p=n>>2 = "+p + "; q=m<<2 " + q); long x=-75, y =-333, u,v,w; u = x>>2; v = y<<2; w = x/4; Console.WriteLine("x= " + x + "; y= " + y + "; u=x>>2 = "+u + "; v=y<<2 " + v + "; w = x/4 = " + w); }//Shift