## Other Operators

**Most Common Operators**

*Equality and Comparison Operators*

== : test for equality

!= : test for inequality

*Conditional Operators:*

&& : AND

|| : OR

*Conditional operator (ternary operator)*

Takes three operands q? a: b

The compound assignment operators are syntactic shortcuts that combine assignment

with another operator.

For example:

x *= 2 // equivalent to x = x * 2 x <<= 1 // equivalent to x = x << 1

**Multiplicative Operators**

**x * y** – multiplication.

**x / y** – division. If the operands are integers, the result is an integer truncated toward zero (for example, -7 / 2 is -3).

**x % y** – modulus. If the operands are integers, this returns the remainder of dividing x by y. If q = x / y and r = x % y, then x = q * y + r.

**Additive Operators**

x + y – addition for numeric and concatenation for string

x – y – subtraction for numeric

**Shift Operators**

**x << y** – shift bits left and fill with zero on the right.

**x >> y** – shift bits right. If the left operand is int or long, then left bits are filled with the sign bit. If the left operand is uint or ulong, then left bits are filled with zero.

**Relational and Type-testing Operators**

x < y – less than (true if x is less than y). x > y – greater than (true if x is greater than y).

x <= y – less than or equal to. x >= y – greater than or equal to.

**is** – type compatibility. Returns true if the evaluated left operand can be cast to the type specified in the right operand (a static type).

**as** – type conversion. Returns the left operand cast to the type specified by the right operand (a static type), but as returns null where (T)x would throw an exception.

**Equality Operators**

x == y – equality. By default, for reference types other than string, this returns reference equality (identity test). However, types can overload ==, so if your intent is to test identity, it is best to use the ReferenceEquals method on object.

x != y – not equal. See comment for ==. If a type overloads ==, then it must overload !=.

**Logical AND Operator**

x & y – logical or bitwise AND. Use with integer types and enum types is generally allowed.

**Logical XOR Operator**

x ^ y – logical or bitwise XOR. You can generally use this with integer types and enum types.

**Logical OR Operator**

x | y – logical or bitwise OR. Use with integer types and enum types is generally allowed.

**Conditional AND Operator**

x && y – logical AND. If the first operand is false, then C# does not evaluate the second operand.

**Conditional OR Operator**

x || y – logical OR. If the first operand is true, then C# does not evaluate the second operand.

**Null-coalescing Operator**

x ?? y – returns x if it is non-null; otherwise, returns y.

**Conditional Operator**

t ? x : y – if test t is true, then evaluate and return x; otherwise, evaluate and return y.

**Assignment and Lambda Operators**

x = y – assignment.

x += y – increment. Add the value of y to the value of x, store the result in x, and return the new value. If x designates an event, then y must be an appropriate function that C# adds as an event handler.

x -= y – decrement. Subtract the value of y from the value of x, store the result in x, and return the new value. If x designates an event, then y must be an appropriate function that C# removes as an event handler

x *= y – multiplication assignment. Multiply the value of y to the value of x, store the result in x, and return the new value.

x /= y – division assignment. Divide the value of x by the value of y, store the result in x, and return the new value.

x %= y – modulus assignment. Divide the value of x by the value of y, store the remainder in x, and return the new value.

x &= y – AND assignment. AND the value of y with the value of x, store the result in x, and return the new value.

x |= y – OR assignment. OR the value of y with the value of x, store the result in x, and return the new value.

x ^= y – XOR assignment. XOR the value of y with the value of x, store the result in x, and return the new value.

x <<= y – left-shift assignment. Shift the value of x left by y places, store the result in x, and return the new value. x >>= y – right-shift assignment. Shift the value of x right by y places, store the result in x, and return the new value.

=> – lambda declaration.