An operator is a symbol that tells the
compiler to perform specific mathematical or logical functions. C language is
rich in built-in operators and provides the following types of operators:
1. Arithmetic
Operators
2. Relational
Operators
3. Logical
Operators
4. Bitwise
Operators
5. Assignment
Operators
6. Misc. Operators
We will look into the way each operator
works in the below:
Arithmetic
Operators
The following table shows all the
arithmetic operators supported by C language. Assume variable a holds 10 and variable b holds 20 then:
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
|
The following table shows all the
relational operators supported by C language. Assume variable a holds 10 and variable b holds 20 then:
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.
|
Logical
Operators
The following table shows all the
logical operators supported by C language. Assume variable a holds 1 and variable b
holds 0, then:
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.
|
Bitwise
Operators
Bitwise operator works on bits and
performs bit-by-bit operation. The truth table for &, |, and ^ is as
follows:
p
|
q
|
p & q
|
p | q
|
p ^ q
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
1
|
1
|
1
|
1
|
1
|
1
|
0
|
1
|
0
|
0
|
1
|
1
|
The following table lists all the
bitwise operators supported by C language. Assume variable a holds 60 and variable b
holds 13. In the binary format, their values are a = 0011 1100 and b = 0000
1101, then:
Operator
|
Description
|
Example
|
&
|
Binary AND Operator
copies a bit to the result if it exists in both operands.
|
(a & b) =
12, i.e., 0000 1100
|
|
|
Binary OR
Operator copies a bit if it exists in either operand.
|
(a | b) = 61,
i.e., 0011 1101
|
^
|
Binary XOR
Operator copies the bit if it is set in one operand but not both.
|
(a ^ b) = 49,
i.e., 0011 0001
|
~
|
Binary Ones
Complement Operator is unary and has the effect of 'flipping' bits.
|
(~a ) = -61, i.e.,
1100 0011 in
2's complement form.
|
<<
|
Binary Left
Shift Operator. The left operands value is moved left by the number of bits
specified by the right operand.
|
a << 2 =
240 i.e., 1111 0000
|
>>
|
Binary Right
Shift Operator. The left operands value is moved right by the number of bits
specified by the right operand.
|
a >> 2 =
15 i.e.,
0000 1111
|
Assignment
Operators
The following table lists the assignment
operators supported by the C language:
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
|
Miscellaneous
Operators
Besides the operators discussed above,
there are a few other important operators including supported by the C
Language, which are listed in the table below:
Operator
|
Description
|
Example
|
sizeof()
|
Returns the
size of a variable.
|
sizeof(a),
where a is an integer, will return 4.
|
&
|
Returns the
address of a variable.
|
&a;
returns the actual address of the variable.
|
*
|
Pointer to a
variable.
|
*a;
|
? :
|
Conditional
Expression.
|
If condition
is true ? then value x : otherwise value y
|
Operators
Precedence in C
Operator precedence determines the
grouping of terms in an expression and decides how an expression is evaluated.
Certain operators have higher precedence than others; for example, the
multiplication operator has a higher precedence than the addition operator.
For example, x = 7 + 3 * 2; here, x is
assigned 13, not 20 because operator * has a higher precedence than +, so it
first gets multiplied with 3*2 and then adds into 7.
Here, operators with the highest
precedence appear at the top of the table, those with the lowest appear at the
bottom. Within an expression, higher precedence operators will be evaluated
first.
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
|