IF221106 · Algoritma dan Pemrograman
Pertemuan 4–5 — Operator dalam Bahasa C
Eka Prakarsa Mandyartha, ST., M.Kom.
Prodi Informatika · UPN Veteran Jawa Timur
Materi Kuliah · Pertemuan 4 – 5
Operator dalam
Bahasa C
Memahami jenis-jenis operator, cara membentuk ekspresi, serta aturan prioritas eksekusi operator dalam bahasa pemrograman C.
📄 6 Halaman 🔢 7 Jenis Operator 💻 Bahasa C
Progres Belajar
Halaman 1 dari 6
Pengantar
Apa itu Operator?
Definisi

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:

Unary

Satu Operand

Operator yang hanya membutuhkan satu buah operand.
Contoh: ++a, x--, !flag

Binary

Dua Operand

Operator yang membutuhkan dua buah operand.
Contoh: a = b + c, x * y

Ternary

Tiga Operand

Operator yang membutuhkan tiga buah operand. Hanya ada satu operator ternary dalam bahasa C, yaitu operator kondisi.
Contoh: (a > b) ? a : b

Operator 1 dari 7
Operator Aritmatika

Operator aritmatika digunakan untuk menghitung operasi matematika dasar. Bahasa C menyediakan lima operator aritmatika:

OperatorNamaContohHasil
+Penjumlahan10 + 313
-Pengurangan10 - 37
*Perkalian10 * 330
/Pembagian10 / 33 (integer)
%Modulus (sisa bagi)10 % 31
⚠ Perhatian: Pembagian dua bilangan bertipe int akan menghasilkan bilangan bulat (desimal dibuang). Untuk mendapatkan hasil pecahan, gunakan tipe float atau double.
Contoh Program — Operator Aritmatika
aritmatika.cC
#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 2 & 3 dari 7
Penaikan/Penurunan: ++ dan --  (Prefix vs Postfix)

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.

Kunci Perbedaan

Prefix ++x  →  Naikkan dulu, baru gunakan nilainya dalam ekspresi.
Postfix x++  →  Gunakan nilainya dulu dalam ekspresi, baru naikkan.

Ilustrasi Langkah demi Langkah: PREFIX — ++x
int x = 5;    int y = ++x;
0
Kondisi awal
x
5
y
?
1
PERTAMA: nilai x dinaikkan dari 5 menjadi 6
x
6
y
?
2
KEDUA: nilai x yang sudah naik (6) diassign ke y
x
6
y
6
Hasil akhir: x = 6, y = 6
Ilustrasi Langkah demi Langkah: POSTFIX — x++
int x = 5;    int z = x++;
0
Kondisi awal
x
5
z
?
1
PERTAMA: nilai x yang sekarang (5) diassign dulu ke z
x
5
z
5
2
KEDUA: baru sekarang x dinaikkan dari 5 menjadi 6
x
6
z
5
Hasil akhir: x = 6, z = 5  ← z BERBEDA dari y pada contoh prefix!
KodeJenisUrutanNilai xNilai y/z
int x=5; y=++x;PrefixNaik dulu → assign66
int x=5; z=x++;PostfixAssign dulu → naik65
Buktikan Sendiri — Jalankan Program Ini
prefix_postfix.cC
#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;
}
⚠ Kasus Paling Penting: Langsung di dalam printf()

Ketika ++x atau x++ diletakkan langsung di dalam printf(), output yang tercetak sudah pasti berbeda — karena yang dicetak adalah nilai sebelum atau sesudah kenaikan.

/* x dimulai dari 5 pada kedua kasus */
int x = 5;

// PREFIX: naikkan DULU, baru cetak
printf("%d", ++x); // mencetak: 6 ← nilai SETELAH naik

x = 5; // reset ke 5

// POSTFIX: cetak DULU, baru naikkan
printf("%d", x++); // mencetak: 5 ← nilai SEBELUM naik
Ilustrasi Alur Eksekusi printf() — x mulai dari 5
PREFIX printf("%d", ++x); dengan x = 5
1
Evaluasi argumen ++x — naikkan x dulu
x sebelum
5
x sesudah
6
2
Nilai yang sudah naik (6) diserahkan ke printf → dicetak
Output layar: 6 ← nilai SETELAH kenaikan
POSTFIX printf("%d", x++); dengan x = 5
1
Evaluasi argumen x++ — ambil nilai x yang sekarang, simpan sementara
nilai sementara
5
diserahkan ke printf
2
Nilai sementara (5) dicetak oleh printf
Output layar: 5 ← nilai SEBELUM kenaikan
3
Baru sekarang x dinaikkan (tapi sudah terlambat untuk printf)
x sekarang
6
— tapi printf sudah selesai mencetak 5
Tabel Perbandingan Lengkap — x dimulai dari 5
KodeJenisYang dicetak / yang di-assignNilai 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
⚠ Kesimpulan penting:
Nilai x setelah eksekusi selalu 6 pada kedua kasus — yang berbeda adalah nilai yang sempat digunakan/dicetak selama ekspresi dievaluasi. Postfix "menunda" kenaikan sampai setelah nilai aslinya dipakai.
💡 Aturan praktis:
Gunakan 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 (Kombinasional)

Operator pemendekan menyingkat penulisan operasi penugasan. a += b identik dengan a = a + b.

PemendekanSetara dengan
a += ba = a + b
a -= ba = a - b
a *= ba = a * b
a /= ba = a / b
a %= ba = a % b
Operator 5 dari 7
Operator Relasi

Operator relasi digunakan untuk membandingkan dua buah operand. Hasil dari ekspresi relasi selalu berupa nilai boolean: 1 (benar/true) atau 0 (salah/false).

SimbolArtiContohHasil
==Sama dengan5 == 51 (benar)
!=Tidak sama dengan5 != 31 (benar)
>Lebih dari5 > 31 (benar)
<Kurang dari5 < 30 (salah)
>=Lebih dari atau sama dengan5 >= 51 (benar)
<=Kurang dari atau sama dengan3 <= 51 (benar)
⚠ Jangan tertukar! Operator sama dengan untuk perbandingan adalah == (dua tanda sama), bukan = (satu tanda sama). Menulis if (x = 5) bukan membandingkan, melainkan men-assign nilai 5 ke x.
Contoh Program — Operator Relasi
relasi.cC
#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 6 dari 7 — Bagian A
Operator Logika

Operator logika digunakan untuk menghubungkan dua atau lebih ekspresi kondisi menjadi sebuah ungkapan logika. Hasilnya selalu berupa nilai boolean (1 atau 0).

OperatorSimbolKeterangan
AND&&Bernilai 1 jika semua kondisi benar
OR||Bernilai 1 jika salah satu kondisi benar
NOT!Membalik nilai kondisi (benar → salah, salah → benar)
ABA && BA || B!A
00001
01011
10010
11110
Contoh Program — Operator Logika
logika.cC
#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 6 dari 7 — Bagian B
Operator Kondisi (Ternary)

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.

Sintaks

operand1 ? operand2 : operand3

Jika operand1 bernilai benar → nilai yang diambil adalah operand2
Jika operand1 bernilai salah → nilai yang diambil adalah operand3

Contoh Program — Operator Ternary
ternary.cC
#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;
}
🔗 Hubungan Ternary dengan Seleksi Kondisi if-else

Operator ternary dan if-else menyelesaikan masalah yang sama: memilih tindakan berdasarkan kondisi. Bandingkan keduanya:

Operator Ternary
int n = 75;
char *ket;

ket = (n >= 60)
   ? "Lulus"
   : "Tidak Lulus";
Seleksi Kondisi if-else
int n = 75;
char *ket;

if (n >= 60) {
   ket = "Lulus";
} else {
   ket = "Tidak Lulus";
}

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.

💡 Mengapa ini penting?
Konsep evaluasi kondisi yang dipelajari melalui operator relasi (==, >, < 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 7 dari 7
Operator Bitwise — Manipulasi Data Level Bit

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.

Ingat: Desimal 10 tersimpan dalam memori sebagai biner 0000 1010, dan 6 sebagai 0000 0110. Operator bitwise bekerja pada tiap posisi bit ini.
DesimalBiner (8-bit)DesimalBiner (8-bit)
50000 0101100000 1010
60000 0110200001 0100
① AND ( & ) — bit 1 hanya jika keduanya 1

1 & 1 = 1  |  1 & 0 = 0  |  0 & 1 = 0  |  0 & 0 = 0

10 =
0
0
0
0
1
0
1
0
6 =
0
0
0
0
0
1
1
0
10&6 =
0
0
0
0
0
0
1
0
= 2
② OR ( | ) — bit 1 jika salah satu atau keduanya 1

1 | 1 = 1  |  1 | 0 = 1  |  0 | 1 = 1  |  0 | 0 = 0

10 =
0
0
0
0
1
0
1
0
6 =
0
0
0
0
0
1
1
0
10|6 =
0
0
0
0
1
1
1
0
= 14
③ Left Shift ( << ) — geser semua bit ke kiri = kalikan 2
10 << 1   (geser kiri 1 = 10 × 2 = 20)
10 =
0
0
0
0
1
0
1
0
←← geser
20 =
0
0
0
1
0
1
0
0
= 20 ✓
④ Right Shift ( >> ) — geser semua bit ke kanan = bagi 2
10 >> 1   (geser kanan 1 = 10 ÷ 2 = 5)
10 =
0
0
0
0
1
0
1
0
geser →→
5 =
0
0
0
0
0
1
0
1
= 5 ✓
💡 Cara mudah mengingat Shift:
x << n = x × 2⊃n     |     x >> n = x ÷ 2⊃n
Contoh: 10 << 2 = 10 × 4 = 40  |  10 >> 2 = 10 ÷ 4 = 2
SimbolNamaContohHasil
&AND10 & 62
|OR10 | 614
^XOR (berbeda=1, sama=0)10 ^ 612
~NOT (balik semua bit)~10-11
<<Left Shift (×2)10 << 120
>>Right Shift (÷2)10 >> 15
Prioritas Operator
Urutan Eksekusi Operator

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.

PrioritasOperatorJenisArah
Tertinggi++ -- (postfix)Penaikan/PenurunanKiri → Kanan
++ -- (prefix)   !   ~UnaryKanan → Kiri
*   /   %Aritmatika (perkalian)Kiri → Kanan
+   -Aritmatika (penjumlahan)Kiri → Kanan
<<   >>Bitwise shiftKiri → Kanan
<   <=   >   >=RelasiKiri → Kanan
==   !=KesamaanKiri → Kanan
&Bitwise ANDKiri → Kanan
^Bitwise XORKiri → Kanan
|Bitwise ORKiri → Kanan
&&Logika ANDKiri → Kanan
||Logika ORKiri → Kanan
? :TernaryKanan → Kiri
Terendah=   +=   -=   *=   /= dll.PenugasanKanan → Kiri
Gunakan tanda kurung! Jika ragu dengan prioritas, tambahkan tanda kurung () untuk mempertegas urutan eksekusi yang diinginkan. Tanda kurung selalu memiliki prioritas tertinggi.
Contoh — Pengaruh Prioritas terhadap Hasil
prioritas.cC
#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;
}
Latihan Terpadu
Program Gabungan Semua Operator

Berikut contoh program yang menggabungkan berbagai jenis operator dalam satu program untuk melihat bagaimana operator bekerja bersama-sama.

semua_operator.cC
#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;
}
Ringkasan Pertemuan 4 – 5
Yang Telah Kita Pelajari
7
Jenis Operator
3
Sifat Operator (Unary, Binary, Ternary)
6
Operator Bitwise
  • Operator aritmatika: + - * / % untuk operasi matematika dasar
  • Operator penugasan = dan pemendekan += -= *= /= %=
  • Operator penaikan ++ dan penurunan -- — prefix dan postfix berbeda perilaku
  • Operator relasi menghasilkan nilai 1 (benar) atau 0 (salah); == berbeda dengan =
  • Operator logika && || ! untuk menggabungkan kondisi
  • Operator ternary ? : sebagai pengganti if-else sederhana
  • Operator bitwise << >> & | ^ ~ untuk manipulasi data level bit
  • Prioritas operator menentukan urutan eksekusi — gunakan tanda kurung jika ragu
Latihan Terpadu
Program Gabungan Semua Operator
semua_operator.cC
#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;
}
Ringkasan Pertemuan 4 – 5
Yang Telah Kita Pelajari
7
Jenis Operator
3
Sifat: Unary, Binary, Ternary
6
Operator Bitwise
  • Aritmatika + - * / % — perhatikan pembagian integer
  • Prefix ++x: naikkan dulu → gunakan. Postfix x++: gunakan dulu → naikkan
  • Relasi menghasilkan 1/0; == (perbandingan) berbeda dengan = (penugasan)
  • Logika && || ! menggabungkan ekspresi kondisi
  • Ternary kondisi ? benar : salah — fondasi logika percabangan, setara if-else
  • Bitwise &, |, ^, ~ bekerja per bit; << n = ×2⊃n, >> n = ÷2⊃n
  • Prioritas: * / % > + - > relasi > logika; gunakan () jika ragu
🔸 Topik Berikutnya
Seleksi Kondisi — if, if-else, else if, switch
Konsep evaluasi kondisi dari operator relasi, logika, dan ternary yang sudah dipelajari akan menjadi fondasi utama logika percabangan program.