Операции проверки типов Операции проверки типов is и as будут рассмотрены в последующих лекциях. (см. лекцию 19). Операции сдвига Операции сдвига вправо ">>" и сдвига влево "<<" в обычных вычислениях применяются редко. Они особенно полезны, если данные рассматриваются как строка битов. Результатом операции является сдвиг строки битов влево или вправо на K разрядов. В применении к обычным целым положительным числам сдвиг вправо равносилен делению нацело на 2K, а сдвиг влево - умножению на 2K. Для отрицательных чисел сдвиг влево и деление дают разные результаты, отличающиеся на единицу. В языке 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 Логические операции Начну с предупреждения тем, кто привык к языку C++. Правила работы с логическими выражениями в языках C# и C++ имеют принципиальные различия. В языке C++ практически для всех типов существует неявное преобразование в логический тип. Правило преобразования простое, - ненулевые значения трактуются как истина, нулевое - как ложь. В языке C# неявных преобразований к логическому типу нет даже для целых арифметических типов. Поэтому вполне корректная в языке C++ запись: int k1 = 7; if (k1) Console.WriteLine("ok!"); незаконна в программах на C#. На этапе трансляции возникнет ошибка, поскольку вычисляемое условие имеет тип int, а неявное преобразование этого типа к типу bool отсутствует. В языке C# более строгие правила действуют и для логических операций. Так, запись if(k1 && (x>y)), корректная в языке C++, приводит к ошибке в программах на C#, поскольку операция && определена только для операндов типа bool, а в данном выражении один из операндов имеет тип int |