C# provides a large set of operators, which are symbols that specify which operations to perform in an expression. Operations on integral types such as ==, !=, <, >, <=, >=, binary +, binary –, ^, &, , ~, ++, —, and sizeof() are generally allowed on enumerations. In addition, many operators can be overloaded by the user, thus changing their meaning when applied to a userdefined type.
The following table lists the C# operators grouped in order of precedence. Operators within each group have equal precedence.
Operator category 
Operators 

Primary 

Unary 

Multiplicative 

Additive 

Shift 

Relational and type testing 

Equality 

Logical AND 

Logical XOR 

Logical OR 

Conditional AND 

Conditional OR 

Nullcoalescing 

Conditional 

Assignment and lambda expression 
The arithmetic operators (+, –, *, /) can produce results that are outside the range of possible values for the numeric type involved. You should refer to the section on a particular operator for details, but in general:

Integer arithmetic overflow either throws an OverflowException or discards the most significant bits of the result. Integer division by zero always throws a DivideByZeroException.

Floatingpoint arithmetic overflow or division by zero never throws an exception, because floatingpoint types are based on IEEE 754 and so have provisions for representing infinity and NaN (Not a Number).

Decimal arithmetic overflow always throws an OverflowException. Decimal division by zero always throws a DivideByZeroException.
When integer overflow occurs, what happens depends on the execution context, which can be checked or unchecked. In a checked context, an OverflowException is thrown. In an unchecked context, the most significant bits of the result are discarded and execution continues. Thus, C# gives you the choice of handling or ignoring overflow.
In addition to the arithmetic operators, integraltype to integraltype casts can cause overflow, for example, casting a long to an int, and are subject to checked or unchecked execution. However, bitwise operators and shift operators never cause overflow.
May 29, 2014 at 3:13 pm
Add two numbers with out + operation
unsigned int myAdd(unsigned int a, unsigned int b)
{
unsigned int carry = a & b;
unsigned int result = a ^ b;
while(carry != 0)
{
unsigned int shiftedcarry = carry << 1;
carry = result & shiftedcarry;
result ^= shiftedcarry;
}
return result;
}