What are the different operators available in C ?
In the C programming language, operators are special symbols that perform specific operations on one, two, or three operands, and then return a result. Operators are used to manipulate variables and constants, and they are essential for building expressions and controlling the flow of a program. Here + is acting as a operator and X and Y as operands.
C has a wide range of operators, which can be classified into the following categories:
- Arithmetic Operators
- Assignment Operators
- Relational Operators
- Logical Operators
- Conditional/ Ternary Operator
- Bitwise Operators
Arithmetic Operators
These operators perform basic arithmetic operations, such as addition, subtraction, multiplication, and division. For example:
Operator | Description | Example |
+ | Adds two operands. | A + B = 30 |
− | Subtracts second operand from the first. | A − B = -10 |
* | Multiplies both operands. | A * B = 200 |
/ | Divides numerator by de-numerator. | B / A = 2 |
% | Modulus Operator and remainder of after an integer division. | B % A = 0 |
++ | Increment operator increases the integer value by one. | A++ = 11 |
-- | Decrement operator decreases the integer value by one. | A-- = 9 |
For example:
int a = 10;
int b = 20;
int c = a + b; // c will be 30
int d = a * b; // d will be 200
Assignment Operators
These operators assign a value to a variable. For example:Assume A = 5 and B= 15
Operator | Description | Example |
= | Simple assignment operator. Assigns values from right side operands to left side operand | C = A + B will assign the value of A + B to C |
+= | Add AND assignment operator. It adds the right operand to the left operand and assign the result to the left operand. | C += A is equivalent to C = C + A |
-= | Subtract AND assignment operator. It subtracts the right operand from the left operand and assigns the result to the left operand. | C -= A is equivalent to C = C - A |
*= | Multiply AND assignment operator. It multiplies the right operand with the left operand and assigns the result to the left operand. | C *= A is equivalent to C = C * A |
/= | Divide AND assignment operator. It divides the left operand with the right operand and assigns the result to the left operand. | C /= A is equivalent to C = C / A |
%= | Modulus AND assignment operator. It takes modulus using two operands and assigns the result to the left operand. | C %= A is equivalent to C = C % A |
<<= | Left shift AND assignment operator. | C <<= 2 is same as C = C << 2 |
>>= | Right shift AND assignment operator. | C >>= 2 is same as C = C >> 2 |
&= | Bitwise AND assignment operator. | C &= 2 is same as C = C & 2 |
^= | Bitwise exclusive OR and assignment operator. | C ^= 2 is same as C = C ^ 2 |
|= | Bitwise inclusive OR and assignment operator. | C |= 2 is same as C = C | 2 |
For example:
int a = 10;
int b = 20;
a = b; // a will be 20
Relational Operators
These operators compare two operands and return a boolean value (true
or false
) based on the result of the comparison. For example: Assume A = 5 and B= 15
Operator | Description | Example |
== | Checks if the values of two operands are equal or not. If yes, then the condition becomes true. | (A == B) is not true. |
!= | Checks if the values of two operands are equal or not. If the values are not equal, then the condition becomes true. | (A != B) is true. |
> | Checks if the value of left operand is greater than the value of right operand. If yes, then the condition becomes true. | (A > B) is not true. |
< | Checks if the value of left operand is less than the value of right operand. If yes, then the condition becomes true. | (A < B) is true. |
>= | Checks if the value of left operand is greater than or equal to the value of right operand. If yes, then the condition becomes true. | (A >= B) is not true. |
<= | Checks if the value of left operand is less than or equal to the value of right operand. If yes, then the condition becomes true. | (A <= B) is true. |
For example:
int a = 10;
int b = 20;
if (a > b)
{
printf("a is greater than b");
}
else
{
printf("a is not greater than b");
}
Logical Operators
These operators perform logical operations, such as AND, OR, and NOT, on two boolean operands. For example: A=1 and B =0
Operator | Description | Example |
&& | Called Logical AND operator. If both the operands are non-zero, then the condition becomes true. | (A && B) is false. |
|| | Called Logical OR Operator. If any of the two operands is non-zero, then the condition becomes true. | (A || B) is true. |
! | Called Logical NOT Operator. It is used to reverse the logical state of its operand. If a condition is true, then Logical NOT operator will make it false. | !(A && B) is true. |
For example:
int a = 10;
int b = 20;
int c = 30;
if (a > b && a < c)
{
printf("a is greater than b and less than c
");
}
else
{
printf("a is not in the range of b and c
");
}
Conditional / Ternary Operator
This operator is also known as the ternary operator, and it takes three operands. It evaluates a condition and returns one of the two operands based on the result of the evaluation. For example:
For Example:
int a = 10;
int b = 20;
int min = (a < b) ? a : b; // min will be 10
Bitwise Operators
bitwise operators are special operators that perform bit-level operations on integer operands. These operators are used to manipulate individual bits in a value stored in an integer variable.
Here is a list of bitwise operators in C:
&
(bitwise AND): Performs a bit-level AND operation on two operands.|
(bitwise OR): Performs a bit-level OR operation on two operands.^
(bitwise XOR): Performs a bit-level XOR operation on two operands.~
(bitwise NOT): Performs a bit-level NOT operation on a single operand.<<
(left shift): Shifts the bits of a number to the left by a specified number of positions.>>
(right shift): Shifts the bits of a number to the right by a specified number of positions.
The truth tables for &, |, and ^ is as follows −
a | b | a&b | a | b | a ^ b |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
Assume a = 60 and b = 13 in binary format, they will be as follows −
a = 0011 1100
b = 0000 1101
Result after Bitwise Operations
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
Differentiate between Binary and Unary Operators
Unary operators: These operators operate on a single operand. For example:
int a = 10;
int b = -a; // b will be -10
int c = ++a; // c will be 11, and a will be 11
int d = --a; // d will be 10, and a will be 10
Binary operators: These operators operate on two operands. For example:
int a = 10;
int b = 20;
int c = a + b; // c will be 30
int d = a * b; // d will be 200
Operator Precedence in C
In C, operator precedence determines the order in which operations are performed in an expression. Operators with higher precedence are evaluated before operators with lower precedence. For example, in the expression a + b * c
, the multiplication operator (*
) has higher precedence than the addition operator (+
), so b * c
is evaluated first, and then the result is added to a
.
Operator Associativity in C
Operator associativity determines the order in which operations of the same precedence are performed in an expression. In C, the associativity of an operator is either left-to-right or right-to-left.
Left-to-right associativity means that operations are performed from left to right. For example, in the expression a - b - c
, the subtraction operator (-
) has left-to-right associativity, so the expression is evaluated as (a - b) - c
.
Right-to-left associativity means that operations are performed from right to left. For example, the assignment operator (=
) has right-to-left associativity, so the expression a = b = c
is evaluated as a = (b = c)
.
Here is a list of the operators in C, ordered by precedence, with the highest precedence at the top:
Category | Operator | Associativity |
Postfix | () [] -> . ++ - - | Left to right |
Unary | + - ! ~ ++ - - (type)* & sizeof | Right to left |
Multiplicative | * / % | Left to right |
Additive | + - | Left to right |
Shift | << >> | Left to right |
Relational | < <= > >= | Left to right |
Equality | == != | Left to right |
Bitwise AND | & | Left to right |
Bitwise XOR | ^ | Left to right |
Bitwise OR | | | Left to right |
Logical AND | && | Left to right |
Logical OR | || | Left to right |
Conditional | ?: | Right to left |
Assignment | = += -= *= /= %=>>= <<= &= ^= |= | Right to left |
Comma | , | Left to right |