Di internet, sudah banyak referensi dan tulisan yang membahas pemrograman — khususnya bahasa C — secara sistematis dan lengkap. Tulisan ini saya susun sebagai catatan pribadi, dan semoga tetap bermanfaat bagi siapa pun yang membacanya.

Ilustrasi: Simbol Operator pada Bahasa C
Ilustrasi: Simbol Operator pada Bahasa C.
Operand vs Operator

Dalam bahasa C terdapat 2 istilah penting, yaitu Operand dan Operator. Operand adalah nilai atau variabel yang digunakan pada suatu operasi, sedangkan operator adalah simbol atau tanda untuk melakukan operasi pada operand. Sebagai contoh:

int a = 5;
int b = 2;
int c = a + b;

Pada baris pertama: int a = 5,

5 adalah operand dari operator =, sedangkan a adalah target penugasan (left-value).

Pada baris kedua: int b = 2,

2 adalah operand dari operator =, sedangkan b adalah target penugasan (left-value).

Pada baris ketiga: int c = a + b,

a dan b adalah operand dari operator +, sedangkan c adalah target penugasan (left-value).


Jenis-Jenis Operator Berdasarkan Jumlah Operand

Berdasarkan jumlah operand-nya, operator dalam pemrograman dapat dibagi menjadi tiga jenis:

1. Unary Operator (1 Operand)

Operator yang bekerja hanya pada 1 operand.

Contoh:

int a = -5;
bool b = !true;
int c = ++a;
  • -, !, dan ++ adalah operator unary.
  • operand-nya masing-masing adalah 5, true, a.

2. Binary Operator (2 Operand)

Operator yang bekerja pada dua operand.

Contoh:

int b = 5 + 3;
  • + adalah operator binary.
  • Operand-nya adalah 5 dan 3.

3. Ternary Operator (3 Operand)

Operator yang bekerja pada tiga operand. Hanya ada satu contoh yang populer pada operator jenis ini, yaitu: conditional (ternary) operator ? :.

Contoh:

bool c = (a ==b) ? true : false;
  • Operand 1: kondisi (a == b)
  • Operand 2: hasil jika kondisi benar (true)
  • Operand 3: hasil jika kondisi salah (false)
  • Operator ternary hanya terdiri dari dua simbol yaitu: ? dan :

Operator Aritmatika (Arithmetic Operators)

Operator aritmatika digunakan untuk melakukan operasi matematika dasar seperti: penjumlahan, pengurangan, perkalian, pembagian dan modulus (sisa bagi).

Daftar operator aritmatika:

OperatorFungsiContoh
+Menjumlahkan dua operanda + b
-Mengurangkan dua operanda - b
*Mengalikan dua operanda * b
/Membagikan dua operanda / b
%Menghasilkan sisa pembagiana % b

Contoh dalam bahasa C:

#include <stdio.h>

int main(void) {
    int a = 10, b = 2;

    int penjumlahan = a + b;
    int pengurangan = a - b;
    int perkalian = a * b;
    int pembagian = a / b;
    int modulus = a % b;

    printf("%d + %d = %d\n", a, b, penjumlahan);
    printf("%d - %d = %d\n", a, b, pengurangan);
    printf("%d * %d = %d\n", a, b, perkalian);
    printf("%d / %d = %d\n", a, b, pembagian);
    printf("%d %% %d = %d\n", a, b, modulus);
    
    return 0;
}
Output Program: Operator Aritmatika.
Output Program: Operator Aritmatika.

Operator Perbandingan (Relational/Comparison Operators)

Operator perbandingan digunakan untuk membandingkan dua nilai. Misalnya: apakah nilai pada variabel a lebih besar dari variabel b?

Daftar operator berbandingan:

OperatorPenjelasanContoh
==Sama dengana == b
!=Tidak sama dengana != b
>Lebih besar daria > b
<Lebih kecil daria < b
>=Lebih besar atau sama dengana >= b
<=Lebih kecil atau sama dengana <= b

Operator-operator ini akan menghasilkan kondisi logika berupa true atau false. Namun karena bahasa c tidak memiliki tipe data boolean bawaan (sebelum C99), hasilnya dikonversi ke int dengan nilai:

  • 1 untuk true
  • 0 untuk false

Contoh dalam bahasa C:

#include <stdio.h>


int main(void) {
    int a = 5, b = 3;

    int sama_dengan = 5 == 3;
    int tidak_sama_dengan = 5 != 3;
    int lebih_besar = 5 > 3;
    int lebih_kecil = 5 < 3;
    int lebih_besar_sama_dengan = 5 >= 3;
    int lebih_kecil_sama_dengan = 5 <= 3;

    printf("%d == %d\t: %d\n", a, b, sama_dengan);
    printf("%d != %d\t: %d\n", a, b, tidak_sama_dengan);
    printf("%d > %d\t: %d\n", a, b, lebih_besar);
    printf("%d < %d\t: %d\n", a, b, lebih_kecil);
    printf("%d >= %d\t: %d\n", a, b, lebih_besar_sama_dengan);
    printf("%d <= %d\t: %d\n", a, b, lebih_kecil_sama_dengan);

    return 0;
}
Output Program: Operator Perbandingan.
Output Program: Operator Perbandingan.

Operator Logika (Logical Operators)

Operator logika adalah operator yang digunakan untuk menggabungkan dua atau lebih kondisi boolean (true atau false) untuk menghasilkan sebuah keputusan logika.

Daftar operator logika:

OperatorPenjelasanContoh
&&AND logika, bernilai true jika kedua operand bernilai truea && b
||OR logika, bernilai true jika salah satu atau kedua operand bernilai truea || b
!NOT logika, membalikkan nilai logika!a

Contoh dalam bahasa C:

#include <stdio.h>

int main(void) {
    int a = 5, b = 2;

    int hasil_and = (a > b) && (b < a);
    int hasil_or = (a > b) || (a < b);
    int hasil_not = !(a == b);

    printf("(a > b) && (b < a)\t: %d\n", hasil_and);
    printf("(a > b) || (a < b)\t: %d\n", hasil_or);
    printf("!(a == b)\t\t: %d\n", hasil_not);

    return 0;

}
Output Program: Operator Logika.
Output Program: Operator Logika.

Untuk memperdalam pemahaman tentang operator logika, silakan kunjungi tautan berikut: https://id.wikipedia.org/wiki/Tabel_kebenaran.


Operator Penugasan (Assignment Operators)

Operator penugasan digunakan untuk memperbarui nilai dari sebuah variabel. Operator ini menempatkan nilai di sisi kanan ke variabel di sisi kiri.

Operator penugasan yang paling dasar adalah =. Namun, terdapat juga operator penugasan gabungan yang menggabungkan operasi aritmatika/logika dengan penugasan.

Daftar operator penugasan:

OperatorPenjelasanContohSetara dengan
=Penugasan dasara = 10
+=Menambahkan lalu menugaskana += 2a = a + 2
-=Mengurangi lalu menugaskana -= 2a = a - 2
*=Mengalikan lalu menugaskana *= 2a = a * 2
/=Membagi lalu menugaskana /= 2a = a / 2
%=Sisa bagi (modulo) lalu menugaskana %= 2a = a % 2

Contoh dalam bahasa C:

#include <stdio.h>

int main(void) {
    int a = 10;
    
    printf("a = %d\n", a);

    int tambah_sama_dengan = a += 2;
    int kurang_sama_dengan = a -= 2;
    int kali_sama_dengan = a *= 2;
    int bagi_sama_dengan = a /= 2;
    int modulo_sama_dengan = a %= 2;

    printf("a += 2\t: %d\n", tambah_sama_dengan);
    printf("a -= 2\t: %d\n", kurang_sama_dengan);
    printf("a *= 2\t: %d\n", kali_sama_dengan);
    printf("a /= 2\t: %d\n", bagi_sama_dengan);
    printf("a %= 2\t: %d\n", modulo_sama_dengan);

    return 0;
}
Output Program: Operator Penugasan.
Output Program: Operator Penugasan.

Operator Bitwise

Operator bitwise digunakan untuk melakukan operasi logika terhadap bilangan dalam bentuk bit-bit biner. Operator ini bekerja dengan membandingkan atau memodifikasi bit-bit individual dari operand.

Daftar operator bitwise:

OperatorPenjelasanContohBinerHasil (Biner)Hasil (Desimal)
&AND bitwise, melakukan operasi AND pada setiap bit dari dua operand8 & 41000 & 010000000
|OR bitwise, melakukan operasi OR pada setiap bit dari dua operand8 | 41000 | 0100110012
^XOR bitwise, melakukan operasi XOR pada setiap bit dari dua operand8 ^ 41000 ^ 0100110012
~NOT bitwise, membalik setiap bit~8~0000100011110111-9 (two complement)
<<Left shift, menggeser bit ke kiri sebanyak n posisi. Setiap shift kiri berarti dikali 28 << 100001000 << 10001000016
>>Right shift, menggeser bit ke kanan sebanyak n posisi. Setiap shift kanan berarti dibagi 28 >> 100001000 >> 1000001004

Contoh dalam bahasa C:

#include <stdio.h>

int main(void) {
    unsigned char a = 12; // 0000 1100
    unsigned char b = 5;  // 0000 0101

    printf("a = %d, b = %d\n", a, b);

    unsigned char and_bitwise = a & b;  // 0000 0100
    printf("a & b = %d\n", and_bitwise);

    unsigned char or_bitwise = a | b;   // 0000 1101
    printf("a | b = %d\n", or_bitwise);

    unsigned char xor_bitwise = a ^ b;  // 0000 1001
    printf("a ^ b = %d\n", xor_bitwise);

    unsigned char not_bitwise = ~a;     // 1111 0011
    printf("~a = %d\n", not_bitwise);

    int not_bitwise_signed = ~a;
    printf("~a = %d (two's complements)\n", not_bitwise_signed);

    unsigned char left_shift = a << 1;  // 0001 1000
    printf("a << 1 = %d\n", left_shift);

    unsigned char right_shift = a >> 1; // 0000 0110
    printf("a >> 1 = %d\n", right_shift);

    return 0;
}
Output Program: Operator Bitwise.
Output Program: Operator Bitwise.

Operator Ternary (Conditional Operator)

Operator ternary adalah operator kondisional singkat yang digunakan untuk mengevaluasi ekspresi logika dan mengembalikan salah satu dari dua nilai, tergantung pada kondisi yang diberikan. Operator ini sering digunakan sebagai pengganti struktur if-else sederhana.

Sintaks:

kondisi ? nilai_jika_benar : nilai_jika_salah;

Contoh dalam bahasa c:

#include <stdio.h>

int main(void) {
    int a = 15;
    int b = 20;
    int max;

    max = (a > b) ? a : b;

    printf("Nilai max adalah: %d\n", max);

    return 0;
}
Output Program: Operator Ternary.
Output Program: Operator Ternary.

Operator Koma (Comma Operator)

Operator koma dalam bahasa C digunakan untuk memisahkan dua atau lebih ekspresi, dan mengevaluasinya dari kiri ke kanan. Nalai dari keseluruhan ekspresi adalah nilai dari ekspresi terakhir.

Sintaks umum:

ekspresi1, ekspresi2, ..., ekspresiN;
  • Semua ekspresi dievaluasi dari kiri ke kanan.
  • Hanya nilai ekspresi terakhir yang dikembalikan.

Contoh dalam bahasa C:

#include <stdio.h>

int main(void) {
    int a = 10;
    int b = 5;
    int c;

    int d = (c = (a + b) * 2, c * 5);

    printf("Nilai dari variabel d adalah: %d\n", d);

    return 0;
}

Penjelasan Per Baris Penting:

int d = (c = (a + b) * 2, c * 5);

mengandung operator koma (,), yang memisahkan dua ekpresi:

Ekspresi pertama:

  • a + b = 10 + 5 = 15
  • 15 * 2 = 30
  • Hasil disimpan ke cc = 30

Ekspresi kedua:

  • c * 5 = 30 x 5 = 150
  • Nilai ini yang menjadi nilai akhir dari ekspresi koma, dan disimpan ke d.
Output Program: Operator Comma.
Output Program: Operator Comma.

Operator Increment dan Decrement

Operator increment dan decrement adalah jenis operator unary yang digunakan untuk menambah atau mengurangi nilai variabel sebanyak 1. Operator ini sebenarnya adalah penulisan singkat dari operasi a = a + 1 atau a = a - 1.

Berdasarkan bentuknya, operator ini dibagi menjadi dua yaitu Prefix (++x atau --x) dan Postfix (x++ atau x--). Prefix artinya nilai ditambah atau dikurangi lebih dulu baru ditampilkan sedangkan postfix nilai tampilkan lebih dulu baru ditambah atau dikurangi.

Contoh dalam bahasa C:

#include <stdio.h>

int main(void){

    // increment (++)
    int x = 10, y = 10;

    int pre_increment = ++x;
    printf("Nilai prefix increment pada variabel x adalah: %d\n", pre_increment);

    int post_increment = y++;
    printf("Nilai postfix increment pada variabel y adalah: %d\n", post_increment);

    // decrement (--)
    int a = 5, b = 5;

    int pre_decrement = --a;
    printf("Nilai prefix decrement pada variabel a adalah: %d\n", pre_decrement);

    int post_decrement = b--;
    printf("Nilai postfix decrement pada variabel b adalah: %d\n", post_decrement);

    return 0;

}
Output Program: Operator Increment & Decrement.
Output Program: Operator Increment & Decrement.

Miscellaneous Operators

Miscellaneous Operators adalah jenis operator yang tidak termasuk pada kategori operator utama seperti aritmatika atau logika, tapi sangat penting dalam pemrograman tingkat rendah dan manipulasi memori.

1. Operator sizeof

sizeof digunakan untuk mengembalikan data berupa ukuran (dalam byte) dari sebuah variabel atau tipe data.

Contoh dalam bahasa C:

#include <stdio.h>

int main(void){
    int x = 10;
    char hello[] = "Hello world!";

    printf("Ukuran tipe data int: %lu byte\n", sizeof(int));
    printf("Ukuran tipe data float: %lu byte\n", sizeof(float));
    printf("Ukuran tipe data double: %lu byte\n", sizeof(double));
    printf("Ukuran tipe data char: %lu byte\n", sizeof(char));
    printf("Ukuran variabel x: %lu byte\n", sizeof(x));
    printf("Ukuran variabel hello: %lu byte\n", sizeof(hello));
    return 0;
}
Output Program: Operator sizeof.
Output Program: Operator sizeof.

2. Operator & (Address-of) dan * (Dereference)

Operator & (Address-of) digunakan untuk mengambil alamat memori dari suatu variabel, sedangkan * (Dereference) digunakan untuk mengambil nilai dari alamat tersebut.

Contoh dalam bahasa C:

#include <stdio.h>

int main(void){
    int a = 10;

    int *p = &a;

    printf("Alamat a: %p\n", &a);           // &a -> alamat dari variabel a
    printf("Nilai p (alamat a): %p\n", p);  // p = &a -> pointer p menyimpan alamat dari a
    printf("Nilai dari *p: %d\n", *p);      // *p -> mengakses nilai dari alamat yang disimpan oleh p

    return 0;
}
Output Program: Operator & (Address-of) dan * (Dereference).
Output Program: Operator & (Address-of) dan * (Dereference).

Catatan: Setiap kali program dijalankan, alamat memori (p = &a) bisa berubah-ubah, tergantung dari alokasi memori oleh sistem operasi.

Sekian, semoga bermanfaat.

CMIIW.