C Operators
Arithmetic, relational, logical, bitwise, and assignment operators with examples.
Arithmetic Operators
| Operator | Description | Example |
|---|---|---|
| + | Addition | a + b |
| - | Subtraction | a - b |
| * | Multiplication | a * b |
| / | Division | a / b |
| % | Modulo (remainder) | a % b |
arithmetic.c
#include <stdio.h>
int main() {
int a = 17, b = 5;
printf("a = %d, b = %d\n", a, b);
printf("Addition: %d\n", a + b); // 22
printf("Subtraction: %d\n", a - b); // 12
printf("Multiplication: %d\n", a * b); // 85
printf("Division: %d\n", a / b); // 3 (integer division)
printf("Modulo: %d\n", a % b); // 2
// Float division
float result = (float)a / b;
printf("Float Division: %.2f\n", result); // 3.40
return 0;
}
Relational Operators
| Operator | Description | Example (a=10, b=20) |
|---|---|---|
| == | Equal to | a == b → 0 (false) |
| != | Not equal to | a != b → 1 (true) |
| > | Greater than | a > b → 0 |
| < | Less than | a < b → 1 |
| >= | Greater than or equal | a >= b → 0 |
| <= | Less than or equal | a <= b → 1 |
Logical Operators
| Operator | Description | Example |
|---|---|---|
| && | AND (both true) | a > 5 && a < 15 |
| || | OR (either true) | a < 5 || a > 15 |
| ! | NOT (negation) | !(a > 5) |
logical.c
#include <stdio.h>
int main() {
int age = 25;
int hasID = 1;
// AND operator
if (age >= 18 && hasID) {
printf("Entry allowed\n");
}
// OR operator
int isMember = 0;
if (hasID || isMember) {
printf("Can enter\n");
}
// NOT operator
if (!isMember) {
printf("Not a member\n");
}
return 0;
}
Bitwise Operators
| Operator | Description | Example (a=5, b=3) |
|---|---|---|
| & | AND | 5 & 3 = 1 (0101 & 0011) |
| | | OR | 5 | 3 = 7 (0101 | 0011) |
| ^ | XOR | 5 ^ 3 = 6 (0101 ^ 0011) |
| ~ | NOT | ~5 = -6 |
| << | Left shift | 5 << 1 = 10 |
| >> | Right shift | 5 >> 1 = 2 |
bitwise.c
#include <stdio.h>
int main() {
unsigned int a = 5; // Binary: 0101
unsigned int b = 3; // Binary: 0011
printf("a = %d (binary: 0101)\n", a);
printf("b = %d (binary: 0011)\n\n", b);
printf("a & b = %d\n", a & b); // 0001 = 1
printf("a | b = %d\n", a | b); // 0111 = 7
printf("a ^ b = %d\n", a ^ b); // 0110 = 6
printf("~a = %u\n", (unsigned)~a);
printf("a << 1 = %d\n", a << 1); // 1010 = 10
printf("a >> 1 = %d\n", a >> 1); // 0010 = 2
// Check if number is even or odd
int num = 7;
if (num & 1)
printf("%d is odd\n", num);
else
printf("%d is even\n", num);
return 0;
}
Assignment Operators
| Operator | Equivalent | Description |
|---|---|---|
| = | a = b | Simple assignment |
| += | a = a + b | Add and assign |
| -= | a = a - b | Subtract and assign |
| *= | a = a * b | Multiply and assign |
| /= | a = a / b | Divide and assign |
| %= | a = a % b | Modulo and assign |
| &= | a = a & b | Bitwise AND and assign |
| |= | a = a | b | Bitwise OR and assign |
assignment.c
#include <stdio.h>
int main() {
int a = 10;
printf("Initial: a = %d\n\n", a);
a += 5; // a = a + 5
printf("After a += 5: %d\n", a);
a -= 3; // a = a - 3
printf("After a -= 3: %d\n", a);
a *= 2; // a = a * 2
printf("After a *= 2: %d\n", a);
a /= 4; // a = a / 4
printf("After a /= 4: %d\n", a);
a %= 3; // a = a % 3
printf("After a %%= 3: %d\n", a);
// Increment/Decrement
int x = 5;
printf("\nPre-increment: %d\n", ++x); // 6
printf("Post-increment: %d\n", x++); // 6 (then becomes 7)
printf("Final x: %d\n", x); // 7
return 0;
}
Operator Precedence
Operators are evaluated in this order (highest to lowest):
- () [] -> . (parentheses, brackets)
- ++ -- ! ~ (unary operators)
- * / % (multiplication, division)
- + - (addition, subtraction)
- << >> (bitwise shift)
- < <= > >= (relational)
- == != (equality)
- & (bitwise AND)
- ^ (bitwise XOR)
- | (bitwise OR)
- && (logical AND)
- || (logical OR)
- = += -= etc. (assignment)