C Operators: A Comprehensive Guide to Unary, Binary, and Ternary Operations
Explore the various operators in C programming, including unary, binary, and ternary operators. Understand their functions and applications in manipulating data and performing calculations in your C code.
C - Operators
An operator is a symbol that performs operations on operands. Operators can be unary (one operand), binary (two operands), or ternary (three operands).
Unary Operators
- ++ (increment)
- -- (decrement)
- ! (NOT)
- ~ (complement)
- & (address of)
- * (dereference)
Binary Operators
These include arithmetic, logical, and relational operators.
Ternary Operators
- ? (conditional)
Arithmetic Operators
Used for basic math operations:
Operator | Description | Example |
---|---|---|
+ | Adds two operands. | A + B = 30 |
- | Subtracts the second operand from the first. | A - B = -10 |
* | Multiplies two operands. | A * B = 200 |
/ | Divides numerator by denominator. | B / A = 2 |
% | Modulus operator; remainder of division. | B % A = 0 |
++ | Increments the value by one. | A++ = 11 |
-- | Decrements the value by one. | A-- = 9 |
Relational Operators
Used to compare two operands:
Operator | Description | Example |
---|---|---|
== | Checks if values are equal. | (A == B) is false |
!= | Checks if values are not equal. | (A != B) is true |
> | Checks if left operand is greater than right. | (A > B) is false |
< | Checks if left operand is less than right. | (A < B) is true |
>= | Checks if left operand is greater or equal to right. | (A >= B) is false |
<= | Checks if left operand is less or equal to right. | (A <= B) is true |
Logical Operators
Used to combine boolean expressions:
Operator | Description | Example |
---|---|---|
&& | Logical AND; true if both operands are non-zero. | (A && B) is false |
|| | Logical OR; true if any operand is non-zero. | (A || B) is true |
! | Logical NOT; reverses the logical state. | !(A && B) is true |
Bitwise Operators
Operate on bits and perform bit-level operations:
Operator | Description | Example |
---|---|---|
& | Bitwise AND; copies bit if it exists in both operands. | (A & B) = 12 |
| | Bitwise OR; copies bit if it exists in either operand. | (A | B) = 61 |
^ | Bitwise XOR; copies bit if it is set in one operand but not both. | (A ^ B) = 49 |
~ | Bitwise NOT; flips the bits. | (~A) = -61 |
<< | Left Shift; shifts bits to the left. | (A << 2) = 240 |
>> | Right Shift; shifts bits to the right. | (A >> 2) = 15 |
Assignment Operators
Used to assign values to variables:
Operator | Description | Example |
---|---|---|
= | Assigns value from right to left. | C = A + B |
+= | Add and assign. | C += A |
-= | Subtract and assign. | C -= A |
*= | Multiply and assign. | C *= A |
/= | Divide and assign. | C /= A |
%= | Modulus and assign. | C %= A |
<<= | Left shift and assign. | C <<= 2 |
>>= | Right shift and assign. | C >>= 2 |
&= | Bitwise AND and assign. | C &= 2 |
^= | Bitwise XOR and assign. | C ^= 2 |
|= | Bitwise OR and assign. | C |= 2 |
Miscellaneous Operators
Other important operators:
Operator | Description | Example |
---|---|---|
sizeof() | Returns the size of a variable. | sizeof(a) |
& | Returns the address of a variable. | &a |
* | Pointer to a variable. | *a |
? : | Conditional expression. | Condition ? X : Y |
Operators Precedence
Operators have different precedence levels which determine the order of evaluation in expressions:
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 |
Other Operators
Includes increment/decrement operators (++ and --), address-of (&), dereference (*), and type cast (()) operators.