C Fundamentals

C Operators

Arithmetic, relational, logical, bitwise, and assignment operators with examples.

Arithmetic Operators

OperatorDescriptionExample
+Additiona + b
-Subtractiona - b
*Multiplicationa * b
/Divisiona / 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

OperatorDescriptionExample (a=10, b=20)
==Equal toa == b → 0 (false)
!=Not equal toa != b → 1 (true)
>Greater thana > b → 0
<Less thana < b → 1
>=Greater than or equala >= b → 0
<=Less than or equala <= b → 1

Logical Operators

OperatorDescriptionExample
&&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

OperatorDescriptionExample (a=5, b=3)
&AND5 & 3 = 1 (0101 & 0011)
|OR5 | 3 = 7 (0101 | 0011)
^XOR5 ^ 3 = 6 (0101 ^ 0011)
~NOT~5 = -6
<<Left shift5 << 1 = 10
>>Right shift5 >> 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

OperatorEquivalentDescription
=a = bSimple assignment
+=a = a + bAdd and assign
-=a = a - bSubtract and assign
*=a = a * bMultiply and assign
/=a = a / bDivide and assign
%=a = a % bModulo and assign
&=a = a & bBitwise AND and assign
|=a = a | bBitwise 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):

  1. () [] -> . (parentheses, brackets)
  2. ++ -- ! ~ (unary operators)
  3. * / % (multiplication, division)
  4. + - (addition, subtraction)
  5. << >> (bitwise shift)
  6. < <= > >= (relational)
  7. == != (equality)
  8. & (bitwise AND)
  9. ^ (bitwise XOR)
  10. | (bitwise OR)
  11. && (logical AND)
  12. || (logical OR)
  13. = += -= etc. (assignment)