0% found this document useful (0 votes)
29 views6 pages

C Language Operators Explained

Uploaded by

Sandeep S
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views6 pages

C Language Operators Explained

Uploaded by

Sandeep S
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

C Operators

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 −

 Arithmetic Operators
 Relational Operators
 Logical Operators
 Bitwise Operators
 Assignment Operators
 Misc Operators
We will, in this chapter, look into the way each operator works.

Arithmetic Operators
The following table shows all the arithmetic operators supported by the C language.
Assume variable A holds 10 and variable B holds 20 then −
Show Examples

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

Relational Operators
The following table shows all the relational operators supported by C. Assume
variable A holds 10 and variable B holds 20 then −
Show Examples
Operator Description Example

== Checks if the values of two operands are equal or not. If yes, then the condition (A == B)
becomes true. is not
true.

!= Checks if the values of two operands are equal or not. If the values are not (A != B)
equal, then the condition becomes true. is true.

> Checks if the value of left operand is greater than the value of right operand. If (A > B)
yes, then the condition becomes true. is not
true.

< Checks if the value of left operand is less than the value of right operand. If yes, (A < B)
then the condition becomes true. is true.

>= Checks if the value of left operand is greater than or equal to the value of right (A >= B)
operand. If yes, then the condition becomes true. is not
true.

<= Checks if the value of left operand is less than or equal to the value of right (A <= B)
operand. If yes, then the condition becomes true. is true.

Logical Operators
Following table shows all the logical operators supported by C language. Assume
variable A holds 1 and variable B holds 0, then −
Show Examples

Operator Description Example

&& Called Logical AND operator. If both the operands are non-zero, then the (A && B)
condition becomes true. is false.

|| Called Logical OR Operator. If any of the two operands is non-zero, then the (A || B) is
condition becomes true. true.

! Called Logical NOT Operator. It is used to reverse the logical state of its !(A &&
operand. If a condition is true, then Logical NOT operator will make it false. B) is
true.
Bitwise Operators
Bitwise operator works on bits and perform bit-by-bit operation. The truth tables 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

Assume A = 60 and B = 13 in binary format, they will be as follows −


A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
The following table lists the bitwise operators supported by C. Assume variable 'A' holds
60 and variable 'B' holds 13, then −
Show Examples

Operator Description Example

& Binary AND Operator copies a bit to the result if it exists (A & B) = 12, i.e., 0000 1100
in both operands.

| Binary OR Operator copies a bit if it exists in either (A | B) = 61, i.e., 0011 1101
operand.

^ Binary XOR Operator copies the bit if it is set in one (A ^ B) = 49, i.e., 0011 0001
operand but not both.
~ Binary One's Complement Operator is unary and has the (~A ) = ~(60), i.e,. -0111101
effect of 'flipping' bits.

<< Binary Left Shift Operator. The left operands value is


moved left by the number of bits specified by the right A << 2 = 240 i.e., 1111 0000
operand.

>> Binary Right Shift Operator. The left operands value is


moved right by the number of bits specified by the right A >> 2 = 15 i.e., 0000 1111
operand.

Assignment Operators
The following table lists the assignment operators supported by the C language −
Show Examples

Operator Description Example

= Simple assignment operator. Assigns values from right C = A + B will assign the value
side operands to left side operand of A + B to C

+= Add AND assignment operator. It adds the right operand


C += A is equivalent to C = C +
to the left operand and assign the result to the left
A
operand.

-= Subtract AND assignment operator. It subtracts the right


operand from the left operand and assigns the result to C -= A is equivalent to C = C - A
the left operand.

*= Multiply AND assignment operator. It multiplies the right


C *= A is equivalent to C = C *
operand with the left operand and assigns the result to
A
the left operand.

/= Divide AND assignment operator. It divides the left


operand with the right operand and assigns the result to C /= A is equivalent to C = C / A
the left operand.

%= Modulus AND assignment operator. It takes modulus


C %= A is equivalent to C = C
using two operands and assigns the result to the left
%A
operand.
<<= 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

Misc Operators ↦ sizeof & ternary


Besides the operators discussed above, there are a few other important operators
including sizeof and ? : supported by the C Language.
Show Examples

Operator Description Example

sizeof() Returns the size of a variable. sizeof(a), where a is integer, will return 4.

& Returns the address of a variable. &a; returns the actual address of the variable.

* Pointer to a variable. *a;

?: If Condition is true ? then value X : otherwise


Conditional Expression.
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.
Show Examples
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

Common questions

Powered by AI

Using bitwise operators instead of logical operators for conditional checks in C can lead to unexpected results due to differences in how they operate on operands. Logical operators (&&, ||) treat operands as boolean values (0 or non-zero), applying short-circuiting rules, which means they stop evaluating as soon as the result is known. In contrast, bitwise operators (&, |) treat operands at the bit level and evaluate both entirely, potentially leading to different truth evaluations. Hence, while logical operators are more suited for boolean logic, using bitwise operators can lead to different outcomes if not used carefully .

The conditional (?:) operator in C can be used as a concise alternative for simple if-else statements. It follows the syntax 'condition ? expression1 : expression2;', executing expression1 if the condition is true and expression2 otherwise. This reduces code verbosity where a single conditional check determines one of two outcomes. However, it is limited to expressions that require a result, as opposed to full if-else statements that support blocks of code and more complex logic, thus restricting its use to smaller decision-making scenarios .

Assignment operators in C like +=, -=, *=, and /= simplify code maintenance and readability by providing a shorthand notation to perform an operation and assignment in one step. This reduces redundancy and the possibility of errors associated with manually writing out each operation entirely. For instance, instead of writing 'C = C + A', the expression 'C += A' achieves the same result more succinctly. This improves code clarity and makes it easier for developers to understand and maintain the codebase .

The sizeof operator can lead to inconsistent results in C when applied to data types or objects whose size might change due to platform-dependent factors, such as alignment or padding added by the compiler for optimization. These variations can occur across different compilers or target architectures. To mitigate this, developers should rely on portable type definitions (e.g., int32_t, uint8_t) from libraries like <stdint.h> or conditionally define data types with preprocessor directives tested for specific environments to ensure consistent size assumptions .

Increment (++) and decrement (--) operators in C affect expression evaluation by modifying the value of a variable before or after its current value is used in the expression. Pre-increment (++A) or pre-decrement (--A) changes the variable's value before it is used in any further operations in the expression. Post-increment (A++) or post-decrement (A--) modifies the variable after it is used in the expression. This distinction determines when the change to the variable is visible in comparison to other operations in the expression .

The right shift (>>) bitwise operator can lead to unexpected results during arithmetic operations in C when applied to signed integers. C compilers use two types of right shifts: logical and arithmetic. For unsigned integers, a logical right shift fills the leftmost bits with zero. However, for signed integers, an arithmetic right shift might fill the leftmost bits with the sign bit (1 for negative numbers), maintaining the number's sign. This may result in incorrect calculations when a positive logic fill is assumed. Ensuring consistent logic fills across various data types with explicit type casting or avoiding right shifts on negatives can mitigate these issues .

Combining logical and relational operators in a single expression affects how conditions are evaluated in C. Relational operators like <, >, ==, and != have higher precedence than logical operators such as &&, ||, and !. This means that within an expression, all relational conditions are evaluated first before any logical operations are applied. For instance, in the expression (A >= B) && (C < D), the relational evaluations A >= B and C < D occur first, followed by the logical AND because the relational operators have precedence over the logical AND operator .

In C, bitwise operators follow a specific precedence order, which affects the evaluation of expressions. The bitwise AND (&) operator has a higher precedence than both bitwise XOR (^) and bitwise OR (|). Therefore, in an expression involving multiple bitwise operators without parentheses, the bitwise AND will be evaluated first, followed by XOR and then OR. For example, in the expression A & B ^ C | D, the operation A & B will be evaluated first, followed by (A & B) ^ C, and then ((A & B) ^ C) | D, unless parentheses dictate a different order of evaluation .

Logical operators facilitate effective control flow in C programs by enabling the combination of multiple conditions into either true or false, guiding decision-making processes. The logical AND (&&) requires all combined conditions to be true for the compound expression to be true, making it useful for validations where all criteria must be met. Logical OR (||) allows the compound expression to be true if any condition is satisfied, offering flexibility in validation. Logical NOT (!) inverts conditions, providing greater control over evaluative expressions and enabling comprehensive conditional branching mechanisms in program logic .

Bitwise operations in C are particularly useful for low-level programming tasks due to their ability to directly manipulate individual bits within data. This allows precise control over hardware settings and efficient storage or retrieval of flags within integer variables, essential in embedded systems and device drivers. For example, using bitwise AND (&) or OR (|) allows developers to clear, set, or toggle specific bits without affecting others, leading to efficient management of resources at the memory level .

You might also like