Checked и unchecked 7 страница.
Если x имеет тип uint или ulong, младшие биты x отбрасываются, оставшиеся биты сдвигаются вправо, а пустые позиции старших битов заполняются нулями. Для стандартных операторов число сдвигаемых битов вычисляется следующим образом. · Если x имеет тип int или uint, размер сдвига задается пятью младшими битами числа. Другими словами, величина сдвига вычисляется от значения число & 0x1F. · Если x имеет тип long или ulong, величина сдвига задается шестью младшими битами числа. Другими словами, величина сдвига вычисляется от значения число & 0x3F. Если результирующая величина сдвига равна нулю, то операторы сдвига просто возвращают значение x. Операции сдвига никогда не вызывают переполнения и дают одинаковые результаты в контекстах checked и unchecked. Если левый операнд оператора >> имеет целый тип со знаком, оператор выполняет арифметический сдвиг вправо, когда значение самого важного бита (бита знака) операнда распространяется на пустые позиции старших битов. Если левый операнд оператора >> имеет целый тип без знака, оператор выполняет логический; сдвиг вправо, когда пустые позиции старших битов всегда заполняются нулями. Для выполнения обратной операции выведенной из типа операнда можно использовать явное приведение типов. Например, если x является переменной типа int, то операция unchecked((int)((uint)x >> y)) выполняет логический сдвиг x вправо. 7.10 Операторы отношения и проверки типа Операторы ==,!=, <, >, <=, >=, is и as называются операторами отношения и проверки типа. реляционное_выражение: выражение_равенства: Оператор is описывается в разделе §7.10.10, а оператор as — в разделе §7.10.11. Операторы ==,!=, <, >, <= и >= являются операторами сравнения. Если операнд оператора сравнения имеет динамический тип во время компиляции, то он динамически связан (§7.2.2). В этом случае тип времени компиляции выражения динамический, а разрешение, приведенное ниже, будет иметь место во время выполнения при использовании типа времени выполнения тех операндов, которые имеют динамический тип во время компиляции. Для операции вида x op y, где op является оператором сравнения, чтобы выбрать конкретную реализацию оператора, применяется разрешение перегрузки (§7.3.4). Операнды преобразуются в типы параметров выбранного оператора, а тип результата является типом возвращаемого значения этого оператора. Стандартные операторы сравнения описываются в следующих разделах. Все стандартные операторы сравнения возвращают результат с типом bool, как показано в следующей таблице.
7.10.1 Операторы сравнения целых чисел К стандартным операторам сравнения целых чисел относятся: bool operator ==(int x, int y); bool operator!=(int x, int y); bool operator <(int x, int y); bool operator >(int x, int y); bool operator <=(int x, int y); bool operator >=(int x, int y); Каждый из этих операторов сравнивает числовые значения двух целых операндов и возвращает значение bool, которое указывает, является ли соответствующее отношение истинным или ложным. 7.10.2 Операторы сравнения чисел с плавающей запятой К стандартным операторам сравнения чисел с плавающей запятой относятся: bool operator ==(float x, float y); bool operator!=(float x, float y); bool operator <(float x, float y); bool operator >(float x, float y); bool operator <=(float x, float y); bool operator >=(float x, float y); Эти операторы сравнивают операнды в соответствии с правилами из стандарта IEEE 754. · Если какой-либо из операторов не является числом, то результатом всех операторов является false, за исключением оператора!=, для которого результатом является true. Для любых двух операндов x!= y всегда дает такой же результат, что и!(x == y). Однако когда один или оба операнда не являются числами, операторы <, >, <= и >= не дают такие же результаты, как логическое отрицание обратного оператора. Например, если x или y не является числом, то x < y имеет значение false, однако!(x >= y) имеет значение true. · Когда оба операнда являются числами, значения двух операндов с плавающей запятой в операторах сравниваются в соответствии со следующим порядком –∞ < –max <... < –min < –0.0 == +0.0 < +min <... < +max < +∞ где min и max являются самым малым и самым большим положительными значениями, которые можно представить в данном формате с плавающей запятой. Главным результатом такого порядка является следующее. o Отрицательные и положительные нулевые значения считаются равными. o Отрицательное бесконечное значение считается меньше всех остальных значений, но равным другому отрицательному бесконечному значению. o Положительное бесконечное значение считается больше всех остальных значений, но равным другому положительному бесконечному значению. 7.10.3 Операторы сравнения десятичных чисел К стандартным операторам сравнения десятичных чисел относятся:
|