Operator adalah simbol yang dilibatkan dalam program untuk melakukan suatu operasi atau manipulasi. Nilai yang dioperasikan oleh operator disebut operand. Operator dan operand bersama-sama membentuk sebuah ekspresi, dan ekspresi tersebut dapat membentuk sebuah pernyataan.
Berdasarkan jumlah operand yang digunakan, operator dalam bahasa C dibedakan menjadi tiga sifat:
Operator yang hanya membutuhkan satu buah operand.
Contoh: ++a, x--, !flag
Operator yang membutuhkan dua buah operand.
Contoh: a = b + c, x * y
Operator yang membutuhkan tiga buah operand. Hanya ada satu operator ternary dalam bahasa C, yaitu operator kondisi.
Contoh: (a > b) ? a : b
Operator aritmatika digunakan untuk menghitung operasi matematika dasar. Bahasa C menyediakan lima operator aritmatika:
| Operator | Nama | Contoh | Hasil |
|---|---|---|---|
+ | Penjumlahan | 10 + 3 | 13 |
- | Pengurangan | 10 - 3 | 7 |
* | Perkalian | 10 * 3 | 30 |
/ | Pembagian | 10 / 3 | 3 (integer) |
% | Modulus (sisa bagi) | 10 % 3 | 1 |
int akan menghasilkan bilangan bulat (desimal dibuang). Untuk mendapatkan hasil pecahan, gunakan tipe float atau double.
#include <stdio.h> int x = 10, y = 20, z; int main() { z = x + y; printf("x + y = %i\n", z); // Output: 30 z = x * y; printf("x * y = %i\n", z); // Output: 200 z = y % x; printf("y %% x = %i\n", z); // Output: 0 return 0; }
Operator ++ (increment) menaikkan nilai variabel sebesar 1, dan -- (decrement) menurunkannya. Operator ini bisa diletakkan di depan (prefix) atau belakang (postfix) — dan keduanya berbeda perilaku ketika ada di dalam ekspresi yang lebih besar.
Prefix ++x → Naikkan dulu, baru gunakan nilainya dalam ekspresi.
Postfix x++ → Gunakan nilainya dulu dalam ekspresi, baru naikkan.
| Kode | Jenis | Urutan | Nilai x | Nilai y/z |
|---|---|---|---|---|
int x=5; y=++x; | Prefix | Naik dulu → assign | 6 | 6 |
int x=5; z=x++; | Postfix | Assign dulu → naik | 6 | 5 |
#include <stdio.h> int main() { int a = 5, b = 5, y, z; y = ++a; // PREFIX: naikkan a dulu, baru assign ke y z = b++; // POSTFIX: assign ke z dulu, baru naikkan b printf("--- PREFIX (++a) ---\n"); printf("a = %d\n", a); // a = 6 printf("y = %d\n", y); // y = 6 printf("--- POSTFIX (b++) ---\n"); printf("b = %d\n", b); // b = 6 printf("z = %d\n", z); // z = 5 <-- perhatikan! return 0; }
Ketika ++x atau x++ diletakkan langsung di dalam printf(), output yang tercetak sudah pasti berbeda — karena yang dicetak adalah nilai sebelum atau sesudah kenaikan.
| Kode | Jenis | Yang dicetak / yang di-assign | Nilai x setelah |
|---|---|---|---|
printf("%d", ++x); |
Prefix | 6 (nilai sesudah naik) | 6 |
printf("%d", x++); |
Postfix | 5 (nilai sebelum naik) | 6 |
int y = ++x; |
Prefix | y = 6 (nilai sesudah naik) | 6 |
int z = x++; |
Postfix | z = 5 (nilai sebelum naik) | 6 |
x++; atau ++x; |
Berdiri sendiri | Sama saja — hasilnya identik | 6 |
i++ atau ++i berdiri sendiri dalam satu baris jika hanya ingin menaikkan nilai — keduanya identik dan tidak ada risiko kebingungan. Berhati-hatilah ketika meletakkannya di dalam ekspresi lain seperti printf(), assignment, atau kondisi if.
Operator pemendekan menyingkat penulisan operasi penugasan. a += b identik dengan a = a + b.
| Pemendekan | Setara dengan |
|---|---|
a += b | a = a + b |
a -= b | a = a - b |
a *= b | a = a * b |
a /= b | a = a / b |
a %= b | a = a % b |
Operator relasi digunakan untuk membandingkan dua buah operand. Hasil dari ekspresi relasi selalu berupa nilai boolean: 1 (benar/true) atau 0 (salah/false).
| Simbol | Arti | Contoh | Hasil |
|---|---|---|---|
== | Sama dengan | 5 == 5 | 1 (benar) |
!= | Tidak sama dengan | 5 != 3 | 1 (benar) |
> | Lebih dari | 5 > 3 | 1 (benar) |
< | Kurang dari | 5 < 3 | 0 (salah) |
>= | Lebih dari atau sama dengan | 5 >= 5 | 1 (benar) |
<= | Kurang dari atau sama dengan | 3 <= 5 | 1 (benar) |
== (dua tanda sama), bukan = (satu tanda sama). Menulis if (x = 5) bukan membandingkan, melainkan men-assign nilai 5 ke x.
#include <stdio.h> int x; int main() { x = 12 > 3; printf("12 > 3 = %i\n", x); // Output: 1 x = 12 == 3; printf("12 == 3 = %i\n", x); // Output: 0 x = 12 != 3; printf("12 != 3 = %i\n", x); // Output: 1 return 0; }
Operator logika digunakan untuk menghubungkan dua atau lebih ekspresi kondisi menjadi sebuah ungkapan logika. Hasilnya selalu berupa nilai boolean (1 atau 0).
| Operator | Simbol | Keterangan |
|---|---|---|
| AND | && | Bernilai 1 jika semua kondisi benar |
| OR | || | Bernilai 1 jika salah satu kondisi benar |
| NOT | ! | Membalik nilai kondisi (benar → salah, salah → benar) |
| A | B | A && B | A || B | !A |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 |
#include <stdio.h> int x = 10, y; int main() { y = (x > 5) && (x < 20); printf("(x>5)&&(x<20) = %i\n", y); // Output: 1 y = (x > 20) || (x == 10); printf("(x>20)||(x==10)= %i\n", y); // Output: 1 y = !(x > 5); printf("!(x>5) = %i\n", y); // Output: 0 return 0; }
Operator kondisi adalah satu-satunya operator ternary dalam bahasa C — menggunakan tiga operand. Operator ini digunakan untuk mendapatkan sebuah nilai dari dua kemungkinan berdasarkan suatu kondisi.
operand1 ? operand2 : operand3
Jika operand1 bernilai benar → nilai yang diambil adalah operand2
Jika operand1 bernilai salah → nilai yang diambil adalah operand3
#include <stdio.h> int main() { int x = 10, y = 20, z; /* Simpan nilai terkecil ke z */ z = (x < y) ? x : y; printf("Nilai terkecil = %i\n", z); // Output: 10 /* Cek genap atau ganjil */ printf("%d adalah %s\n", x, (x % 2 == 0) ? "genap" : "ganjil"); // Output: 10 adalah genap return 0; }
Operator ternary dan if-else menyelesaikan masalah yang sama: memilih tindakan berdasarkan kondisi. Bandingkan keduanya:
Kedua kode di atas menghasilkan output yang identik. Ternary lebih ringkas untuk kasus sederhana. if-else lebih fleksibel untuk kasus kompleks (banyak pernyataan, kondisi bertingkat) — dan inilah yang akan kita pelajari pada topik berikutnya.
==, >, < dll.), operator logika (&&, ||), dan operator ternary (?:) adalah fondasi utama seleksi kondisi. Ketika mempelajari if-else nanti, mekanisme "evaluasi kondisi → pilih jalur" yang sama akan digunakan — hanya cakupan pernyataannya yang lebih luas dan fleksibel.
Operator bitwise bekerja langsung pada representasi biner suatu nilai integer, bit demi bit. Komputer menyimpan semua angka dalam bentuk biner (0 dan 1), dan operator bitwise memanipulasinya secara langsung.
0000 1010, dan 6 sebagai 0000 0110. Operator bitwise bekerja pada tiap posisi bit ini.
| Desimal | Biner (8-bit) | Desimal | Biner (8-bit) |
|---|---|---|---|
| 5 | 0000 0101 | 10 | 0000 1010 |
| 6 | 0000 0110 | 20 | 0001 0100 |
1 & 1 = 1 | 1 & 0 = 0 | 0 & 1 = 0 | 0 & 0 = 0
1 | 1 = 1 | 1 | 0 = 1 | 0 | 1 = 1 | 0 | 0 = 0
x << n = x × 2⊃n | x >> n = x ÷ 2⊃n10 << 2 = 10 × 4 = 40 | 10 >> 2 = 10 ÷ 4 = 2
| Simbol | Nama | Contoh | Hasil |
|---|---|---|---|
& | AND | 10 & 6 | 2 |
| | OR | 10 | 6 | 14 |
^ | XOR (berbeda=1, sama=0) | 10 ^ 6 | 12 |
~ | NOT (balik semua bit) | ~10 | -11 |
<< | Left Shift (×2) | 10 << 1 | 20 |
>> | Right Shift (÷2) | 10 >> 1 | 5 |
Ketika sebuah ekspresi memiliki lebih dari satu operator, bahasa C menentukan urutan eksekusinya berdasarkan tingkat prioritas (precedence). Operator dengan prioritas lebih tinggi dikerjakan lebih dulu.
| Prioritas | Operator | Jenis | Arah |
|---|---|---|---|
| Tertinggi | ++ -- (postfix) | Penaikan/Penurunan | Kiri → Kanan |
++ -- (prefix) ! ~ | Unary | Kanan → Kiri | |
* / % | Aritmatika (perkalian) | Kiri → Kanan | |
+ - | Aritmatika (penjumlahan) | Kiri → Kanan | |
<< >> | Bitwise shift | Kiri → Kanan | |
< <= > >= | Relasi | Kiri → Kanan | |
== != | Kesamaan | Kiri → Kanan | |
& | Bitwise AND | Kiri → Kanan | |
^ | Bitwise XOR | Kiri → Kanan | |
| | Bitwise OR | Kiri → Kanan | |
&& | Logika AND | Kiri → Kanan | |
|| | Logika OR | Kiri → Kanan | |
? : | Ternary | Kanan → Kiri | |
| Terendah | = += -= *= /= dll. | Penugasan | Kanan → Kiri |
() untuk mempertegas urutan eksekusi yang diinginkan. Tanda kurung selalu memiliki prioritas tertinggi.
#include <stdio.h> int main() { int hasil; hasil = 2 + 3 * 4; printf("2 + 3 * 4 = %d\n", hasil); // 14 (* lebih dulu) hasil = (2 + 3) * 4; printf("(2 + 3) * 4 = %d\n", hasil); // 20 (kurung lebih dulu) hasil = 10 > 5 && 3 < 8; printf("10>5 && 3<8 = %d\n", hasil); // 1 (relasi dulu, lalu &&) return 0; }
Berikut contoh program yang menggabungkan berbagai jenis operator dalam satu program untuk melihat bagaimana operator bekerja bersama-sama.
#include <stdio.h> int main() { int a = 10, b = 3, hasil; /* --- Aritmatika --- */ printf("=== ARITMATIKA ===\n"); printf("a + b = %d\n", a + b); // 13 printf("a %% b = %d\n", a % b); // 1 /* --- Pemendekan --- */ printf("\n=== PEMENDEKAN ===\n"); a += b; printf("a += b → a = %d\n", a); // 13 a -= b; printf("a -= b → a = %d\n", a); // 10 /* --- Relasi & Logika --- */ printf("\n=== RELASI & LOGIKA ===\n"); hasil = (a > b) && (a != 0); printf("(a>b)&&(a!=0) = %d\n", hasil); // 1 /* --- Ternary --- */ printf("\n=== TERNARY ===\n"); printf("%d %s dari %d\n", a, (a > b) ? "lebih besar" : "lebih kecil", b); // 10 lebih besar dari 3 /* --- Bitwise --- */ printf("\n=== BITWISE ===\n"); printf("a << 1 = %d\n", a << 1); // 20 printf("a >> 1 = %d\n", a >> 1); // 5 return 0; }
+ - * / % untuk operasi matematika dasar
= dan pemendekan += -= *= /= %=
++ dan penurunan -- — prefix dan postfix berbeda perilaku
== berbeda dengan =
&& || ! untuk menggabungkan kondisi
? : sebagai pengganti if-else sederhana
<< >> & | ^ ~ untuk manipulasi data level bit
#include <stdio.h> int main() { int a = 10, b = 3, x = 5; /* Aritmatika */ printf("a + b = %d\n", a + b); // 13 printf("a %% b = %d\n", a % b); // 1 /* Prefix vs Postfix */ int y = ++x; printf("++x: x=%d y=%d\n", x, y); // x=6 y=6 x = 5; int z = x++; printf("x++: x=%d z=%d\n", x, z); // x=6 z=5 /* Relasi + Logika */ printf("a>5 && b<5 = %d\n", (a > 5) && (b < 5)); // 1 /* Ternary */ printf("%d adalah %s\n", a, (a % 2 == 0) ? "genap" : "ganjil"); // 10 adalah genap /* Bitwise */ printf("a << 1 = %d\n", a << 1); // 20 printf("a & b = %d\n", a & b); // 2 return 0; }
+ - * / % — perhatikan pembagian integer++x: naikkan dulu → gunakan. Postfix x++: gunakan dulu → naikkan== (perbandingan) berbeda dengan = (penugasan)&& || ! menggabungkan ekspresi kondisikondisi ? benar : salah — fondasi logika percabangan, setara if-else<< n = ×2⊃n, >> n = ÷2⊃n() jika ragu