Cara Menggunakan Operator dalam Bahasa C dengan Contoh

Tangan programmer mengetik kode C di keyboard dengan layar monitor menampilkan editor kode.

Operator dalam bahasa C adalah simbol yang memberi tahu compiler untuk melakukan operasi terhadap satu atau lebih nilai. Tanpa operator, kode C hanya berisi variabel tanpa aksi. Berikut jenis-jenis operator, urutan evaluasinya, dan jebakan yang sering dialami pemula.

Apa Itu Operator dalam Bahasa C?

Operator bekerja pada operand, yaitu nilai atau variabel yang menjadi input. Pada ekspresi a + b, tanda + adalah operator, sedangkan a dan b adalah operand. Hasil operasinya bisa langsung dipakai, disimpan ke variabel lain, atau menjadi bagian dari ekspresi yang lebih besar.

Bahasa C membagi operator ke dalam beberapa kelompok berdasarkan fungsinya. Pembahasan dimulai dari yang paling sering dipakai.

Operator Aritmatika

Operator aritmatika biasanya dipelajari pertama kali: penjumlahan (+), pengurangan (-), perkalian (*), pembagian (/), dan modulus (%). Modulus menghasilkan sisa bagi dan hanya berlaku untuk bilangan bulat.

int a = 10, b = 3;
int hasil = a / b;      // 3, karena pembagian integer
int sisa = a % b;      // 1
float hasil_float = (float)a / b; // 3.333...

Pembagian dua integer menghasilkan integer. Kalau butuh hasil desimal, salah satu operand harus diubah ke tipe float. Ini sumber bug yang cukup sering muncul di kode pemula.

Operator aritmatika juga punya versi singkat seperti +=, -=, *=, dan /=. Misalnya a += 5 sama dengan a = a + 5. Bentuk singkat ini membuat kode lebih ringkas, terutama di dalam loop. Jika belum nyaman dengan loop, lihat Cara Menggunakan For Loop dalam Bahasa C untuk Pemula.

Operator Relasional

Operator relasional membandingkan dua nilai dan menghasilkan 1 (benar) atau 0 (salah). Angka 1 dan 0 ini bertipe int, bukan tipe boolean khusus seperti di bahasa lain. Contohnya == (sama dengan), != (tidak sama dengan), >, <, >=, dan <=.

Kesalahan klasik adalah memakai = (penugasan) saat bermaksud membandingkan dengan ==. Di C, if (x = 5) akan menugaskan 5 ke x dan ekspresinya selalu bernilai benar. Compiler modern biasanya memberi peringatan, tapi tetap saja berbahaya. Selalu periksa ulang.

Operator relasional sering dipadukan dengan operator logika untuk membentuk kondisi yang lebih kompleks, misalnya di dalam Cara Menggunakan Switch Case dalam Bahasa C untuk kasus yang lebih spesifik.

Operator Logika

Ada tiga operator logika: && (AND), || (OR), dan ! (NOT). Operator && menghasilkan benar hanya jika kedua operand benar. || menghasilkan benar jika salah satu operand benar. ! membalik nilai kebenaran.

C menerapkan short-circuit evaluation. Pada a && b, jika a sudah salah, b tidak dievaluasi. Begitu juga pada a || b, jika a benar, b dilewati. Ini bukan sekadar optimasi; efek samping pada operand kedua tidak akan terjadi jika operand pertama sudah menentukan hasil.

int x = 0;
if (x != 0 && 10 / x > 2) {
    // blok ini tidak dieksekusi, jadi tidak terjadi division by zero
}

Pemahaman short-circuit berguna saat menulis kondisi yang melibatkan pointer atau pembagian, seperti yang sering muncul di Cara Menggunakan Pointer pada Bahasa C untuk Pemula.

Operator Bitwise

Operator bitwise bekerja pada level bit: & (AND), | (OR), ^ (XOR), ~ (NOT), << (geser kiri), dan >> (geser kanan). Operator ini sering dipakai untuk manipulasi flag, masking, atau operasi low-level.

Contoh penggunaan umum adalah menggabungkan beberapa opsi konfigurasi ke dalam satu integer dengan bitwise OR, lalu mengeceknya dengan bitwise AND. Di kode sistem operasi atau driver, pola ini sangat lazim.

#define FLAG_A 1u << 0
#define FLAG_B 1u << 1

unsigned int opsi = FLAG_A | FLAG_B;
if (opsi & FLAG_A) {
    // FLAG_A aktif
}

Operator Penugasan dan Increment/Decrement

Operator penugasan dasar adalah =. Selain itu ada operator gabungan seperti +=, -=, *=, /=, %=, dan versi bitwise seperti &=, |=, ^=, <<=, >>=.

Operator increment (++) dan decrement (--) menambah atau mengurangi nilai variabel sebesar satu. Keduanya punya bentuk prefix dan postfix. ++i menambah dulu baru mengembalikan nilai, sedangkan i++ mengembalikan nilai lama dulu baru menambah. Dalam ekspresi yang lebih besar, perbedaan ini bisa mengubah hasil.

int i = 5;
int a = ++i; // i jadi 6, a = 6
int b = i++; // b = 6, i jadi 7

Untuk pemula, sebaiknya hindari mencampur increment/decrement dengan operasi lain dalam satu ekspresi. Tulis terpisah agar urutannya jelas.

Prioritas dan Urutan Evaluasi

Setiap operator punya tingkat prioritas. Perkalian dan pembagian lebih tinggi dari penjumlahan dan pengurangan. Operator relasional lebih rendah dari aritmatika, dan operator logika lebih rendah lagi. Tanda kurung () bisa mengubah urutan ini.

Daripada menghafal tabel prioritas, biasakan memakai tanda kurung untuk memperjelas maksud. Kode yang mudah dibaca lebih penting daripada kode yang singkat. Contohnya, (a + b) * c lebih jelas daripada mengandalkan prioritas default.

Urutan evaluasi operand juga perlu diperhatikan. Bahasa C tidak menjamin urutan evaluasi operand pada banyak operator (kecuali &&, ||, koma, dan kondisional). Jadi jangan menulis ekspresi yang hasilnya bergantung pada urutan evaluasi, misalnya f() + g() di mana kedua fungsi mengubah variabel global yang sama.

Operator Kondisional (Ternary)

Operator ?: adalah satu-satunya operator ternary di C. Bentuknya kondisi ? nilai_jika_benar : nilai_jika_salah. Ini berguna untuk ekspresi pendek, misalnya int max = (a > b) ? a : b;. Untuk logika bercabang yang lebih rumit, if-else atau switch lebih mudah dibaca.

Hindari menumpuk ternary secara berlebihan karena akan menyulitkan pembacaan. Jika ekspresi sudah lebih dari satu baris, pertimbangkan untuk memecahnya.

Ringkasan

Operator dalam bahasa C terbagi menjadi aritmatika, relasional, logika, bitwise, penugasan, increment/decrement, dan kondisional. Masing-masing punya aturan prioritas dan perilaku sendiri. Memahami short-circuit dan pembagian integer sejak awal akan menyelamatkanmu dari banyak bug. Latihan rutin dengan contoh kecil adalah cara tercepat untuk menguasainya. Untuk panduan belajar yang lebih terstruktur, baca Tips Praktis Belajar Bahasa C untuk Pemula dari Nol.

Pertanyaan yang Sering Diajukan

Apa perbedaan = dan == di C?

= adalah operator penugasan yang menyimpan nilai ke variabel, sedangkan == adalah operator relasional yang membandingkan dua nilai dan menghasilkan 1 atau 0. Menggunakan = di dalam kondisi if adalah kesalahan umum yang bisa menyebabkan bug sulit dilacak.

Kapan sebaiknya memakai operator bitwise?

Operator bitwise cocok untuk manipulasi flag, masking, atau operasi yang memang bekerja pada level bit. Untuk logika boolean sehari-hari, gunakan operator logika &&, ||, dan ! agar kode lebih mudah dipahami.

Apakah urutan evaluasi operator selalu dari kiri ke kanan?

Tidak selalu. Bahasa C hanya menjamin urutan evaluasi untuk operator &&, ||, operator koma, dan kondisional. Untuk operator lain, urutan evaluasi operand tidak ditentukan. Karena itu, hindari ekspresi yang hasilnya bergantung pada urutan evaluasi.