C# tutorials > Core C# Fundamentals > Basics and Syntax > What are the different types of operators in C#?
What are the different types of operators in C#?
Operators in C# are symbols that perform specific operations on operands (variables, values, or expressions). Understanding operators is fundamental to writing C# code. This tutorial explores the different types of operators available in C# with explanations and examples.
Overview of Operator Types
C# offers a rich set of operators categorized as follows:
Arithmetic Operators
Arithmetic operators perform standard mathematical operations. The modulus operator (%) returns the remainder of a division. Division between integers truncates towards zero (e.g., 5 / 2 results in 2). Use floating-point types (float, double, decimal) for more precise division.
int a = 10;
int b = 5;
int sum = a + b; // Addition
int difference = a - b; // Subtraction
int product = a * b; // Multiplication
int quotient = a / b; // Division
int remainder = a % b; // Modulus (remainder)
Assignment Operators
Assignment operators assign values to variables. The simplest is the equals sign (=). Compound assignment operators combine an arithmetic operation with assignment, providing a shorthand notation.
int x = 10;
x += 5; // Equivalent to x = x + 5 (x is now 15)
x -= 3; // Equivalent to x = x - 3 (x is now 12)
x *= 2; // Equivalent to x = x * 2 (x is now 24)
x /= 4; // Equivalent to x = x / 4 (x is now 6)
x %= 3; // Equivalent to x = x % 3 (x is now 0)
Comparison Operators
Comparison operators compare two operands and return a boolean value (true or false). These operators are crucial for conditional statements and loops.
int a = 5;
int b = 10;
bool isEqual = (a == b); // False
bool isNotEqual = (a != b); // True
bool isGreaterThan = (a > b); // False
bool isLessThan = (a < b); // True
bool isGreaterThanOrEqual = (a >= b); // False
bool isLessThanOrEqual = (a <= b); // True
Logical Operators
Logical operators perform logical operations on boolean operands.
bool x = true;
bool y = false;
bool andResult = x && y; // False (logical AND)
bool orResult = x || y; // True (logical OR)
bool notX = !x; // False (logical NOT)
Bitwise Operators
Bitwise operators perform operations on the individual bits of integers. These are commonly used in low-level programming and for manipulating data at the bit level.
int a = 5; // 0101 in binary
int b = 3; // 0011 in binary
int bitwiseAnd = a & b; // 0001 (1 in decimal)
int bitwiseOr = a | b; // 0111 (7 in decimal)
int bitwiseXor = a ^ b; // 0110 (6 in decimal)
int bitwiseNot = ~a; // ...1010 (implementation-dependent, two's complement)
int leftShift = a << 1; // 1010 (10 in decimal) - shift bits to the left by 1
int rightShift = a >> 1; // 0010 (2 in decimal) - shift bits to the right by 1
Increment and Decrement Operators
Increment and decrement operators increase or decrease the value of a variable by 1. The pre-increment/decrement operators modify the value *before* the expression is evaluated, while the post-increment/decrement operators modify the value *after* the expression is evaluated. Consider this example: `int a = 5; int b = a++;` b will be 5 and a will be 6. If it was `int b = ++a;` then both a and b would be 6.
int x = 5;
x++; // Post-increment (x is now 6)
++x; // Pre-increment (x is now 7)
y--; // Post-decrement (y is now 6, assuming y was initialized to 7)
--y; // Pre-decrement (y is now 5)
Conditional Operator (Ternary Operator)
The conditional operator (?:) is a shorthand for an if-else statement. It takes three operands: a condition, an expression to evaluate if the condition is true, and an expression to evaluate if the condition is false. It can make code more concise, but overuse can reduce readability.
int age = 20;
string message = (age >= 18) ? "Eligible to vote" : "Not eligible to vote";
Console.WriteLine(message); // Output: Eligible to vote
Null-Coalescing Operator
The null-coalescing operator (??) provides a default value if a nullable type is null. If the left-hand operand is not null, it returns that operand; otherwise, it returns the right-hand operand. This operator is very useful for handling nullable values gracefully.
string name = null;
string displayName = name ?? "Guest";
Console.WriteLine(displayName); // Output: Guest
int? nullableValue = null;
int value = nullableValue ?? 0;
Console.WriteLine(value); // Output: 0
Operator Precedence
Operator precedence determines the order in which operators are evaluated in an expression. Multiplication and division generally have higher precedence than addition and subtraction. Parentheses can be used to override the default precedence. Always use parentheses to ensure code clarity and avoid unexpected results. Refer to the C# documentation for a full operator precedence table.
// Example demonstrating operator precedence
int result = 5 + 3 * 2; // Multiplication is performed before addition
Console.WriteLine(result); // Output: 11
// Using parentheses to control precedence
int result2 = (5 + 3) * 2; // Addition is performed first
Console.WriteLine(result2); // Output: 16
Real-Life Use Case: Input Validation
Operators play a crucial role in validating user input. In this example, comparison and logical operators are used to check if an age entered by the user is within a reasonable range.
public static bool IsValidAge(string ageString)
{
if (string.IsNullOrEmpty(ageString))
{
return false;
}
if (int.TryParse(ageString, out int age))
{
return age >= 0 && age <= 150; // Using comparison and logical operators
}
return false; // Not a valid integer
}
Best Practices
Interview Tip
Be prepared to explain the different types of operators in C#, their precedence, and how they are used. Be ready to provide examples of how operators are used in common programming scenarios. A common interview question might involve writing a function that uses bitwise operators to perform a specific task.
When to use them
FAQ
-
What is the difference between pre-increment and post-increment?
Pre-increment (++x) increments the value of the variable *before* it is used in the expression. Post-increment (x++) increments the value of the variable *after* it is used in the expression. Consider: `int x = 5; int y = x++; // y is 5, x is 6`. `int x = 5; int y = ++x; // y is 6, x is 6`. -
How does operator precedence work in C#?
Operator precedence determines the order in which operators are evaluated in an expression. Operators with higher precedence are evaluated before operators with lower precedence. Parentheses can be used to override the default precedence. -
When should I use the null-coalescing operator?
Use the null-coalescing operator when you need to provide a default value for a nullable type if it is null. This helps prevent NullReferenceExceptions and simplifies code.