13.07.2015 Views

C# Language Specification - Willy .Net

C# Language Specification - Willy .Net

C# Language Specification - Willy .Net

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Chapter 14 ExpressionsWhen declaring an overloaded shift operator, the type of the first operand must always be the class or structcontaining the operator declaration, and the type of the second operand must always be int.The predefined shift operators are listed below.• Shift left:int operator > operator shifts x right by a number of bits computed as described below.When x is of type int or long, the low-order bits of x are discarded, the remaining bits are shiftedright, and the high-order empty bit positions are set to zero if x is non-negative and set to one if x isnegative.When x is of type uint or ulong, the low-order bits of x are discarded, the remaining bits are shiftedright, and the high-order empty bit positions are set to zero.For the predefined operators, the number of bits to shift is computed as follows:• When the type of x is int or uint, the shift count is given by the low-order five bits of count. In otherwords, the shift count is computed from count & 0x1F.• When the type of x is long or ulong, the shift count is given by the low-order six bits of count. Inother words, the shift count is computed from count & 0x3F.If the resulting shift count is zero, the shift operators simply return the value of x.Shift operations never cause overflows and produce the same results in checked and unchecked contexts.When the left operand of the >> operator is of a signed integral type, the operator performs an arithmeticshift right wherein the value of the most significant bit (the sign bit) of the operand is propagated to thehigh-order empty bit positions. When the left operand of the >> operator is of an unsigned integral type, theoperator performs a logical shift right wherein high-order empty bit positions are always set to zero. Toperform the opposite operation of that inferred from the operand type, explicit casts can be used. [Example:For example, if x is a variable of type int, the operation unchecked((int)((uint)x >> y)) performs alogical shift right of x. end example]14.9 Relational and type-testing operatorsThe ==, !=, , =, is and as operators are called the relational and type-testing operators.relational-expression:shift-expressionrelational-expression < shift-expressionrelational-expression > shift-expressionrelational-expression = shift-expressionrelational-expression is typerelational-expression as type163

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!