Operator Logika
Di pelajaran sebelumnya, kamu sudah bisa mengecek satu kondisi dengan if. Tapi di dunia nyata, keputusan sering bergantung pada lebih dari satu kondisi. Contoh: “Kamu boleh naik wahana ini kalau umur di atas 12 DAN tinggi di atas 140 cm.” Dua kondisi harus terpenuhi sekaligus! Untuk itu, kita butuh operator logika.
Analogi: Gerbang Masuk Taman Bermain
Bayangkan kamu mau masuk wahana roller coaster. Ada satpam yang mengecek:
- AND (&&): “Umur di atas 12 DAN tinggi di atas 140 cm?” — keduanya harus terpenuhi.
- OR (||): “Bawa tiket reguler ATAU tiket VIP?” — salah satu saja cukup.
- NOT (!): “BUKAN hari libur?” — membalik kondisi.
Tiga Operator Logika
| Operator | Nama | Arti | Contoh |
|---|---|---|---|
&& | AND | Kedua kondisi harus true | umur > 12 && tinggi > 140 |
|| | OR | Minimal satu kondisi true | punyaTiket || punyaVIP |
! | NOT | Membalik nilai boolean | !hujan |
Operator && (AND)
&& menghasilkan true hanya jika kedua kondisi bernilai true. Kalau salah satu saja false, hasilnya false.
Truth Table AND
| A | B | A && B |
|---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
Mudah diingat: AND itu ketat — semua harus benar.
Contoh: Cek Kelayakan Naik Wahana
#include <iostream>
int main() {
int umur = 14;
int tinggi = 145;
std::cout << "Umur: " << umur << " tahun" << std::endl;
std::cout << "Tinggi: " << tinggi << " cm" << std::endl;
if (umur >= 12 && tinggi >= 140) {
std::cout << "Boleh naik roller coaster!" << std::endl;
} else {
std::cout << "Maaf, belum boleh naik." << std::endl;
}
return 0;
}
Output:
Umur: 14 tahun
Tinggi: 145 cm
Boleh naik roller coaster!
Kalau umur 14 tapi tinggi 130? Hasilnya “Maaf, belum boleh naik.” karena 130 >= 140 adalah false, dan true && false = false.
Contoh: Cek Angka dalam Rentang
Salah satu penggunaan && yang paling umum adalah mengecek apakah angka berada dalam rentang tertentu:
#include <iostream>
int main() {
int nilai = 85;
// Cek apakah nilai antara 80 dan 89
if (nilai >= 80 && nilai <= 89) {
std::cout << "Nilai " << nilai << " masuk grade B." << std::endl;
}
// Cek apakah suhu normal (36.1 - 37.2)
double suhu = 36.8;
if (suhu >= 36.1 && suhu <= 37.2) {
std::cout << "Suhu badan normal." << std::endl;
}
return 0;
}
Output:
Nilai 85 masuk grade B.
Suhu badan normal.
Jangan tulis 80 <= nilai <= 89 — ini tidak bekerja seperti yang kamu harapkan di C++! Cara yang benar adalah nilai >= 80 && nilai <= 89.
Operator || (OR)
|| menghasilkan true jika minimal satu kondisi bernilai true. Hanya false kalau keduanya false.
Truth Table OR
| A | B | A || B |
|---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
Mudah diingat: OR itu toleran — satu saja benar, sudah cukup.
Contoh: Cek Hari Libur
#include <iostream>
#include <string>
int main() {
std::string hari = "Minggu";
if (hari == "Sabtu" || hari == "Minggu") {
std::cout << "Asyik, hari libur! Bisa main game." << std::endl;
} else {
std::cout << "Hari sekolah. Semangat belajar!" << std::endl;
}
return 0;
}
Output:
Asyik, hari libur! Bisa main game.
Contoh: Cek Kelayakan Memilih
#include <iostream>
int main() {
int umur = 16;
bool sudahMenikah = true;
std::cout << "Umur: " << umur << " tahun" << std::endl;
std::cout << "Sudah menikah: " << sudahMenikah << std::endl;
// Di Indonesia, bisa memilih jika umur >= 17 ATAU sudah menikah
if (umur >= 17 || sudahMenikah) {
std::cout << "Berhak memilih dalam pemilu." << std::endl;
} else {
std::cout << "Belum berhak memilih." << std::endl;
}
return 0;
}
Output:
Umur: 16 tahun
Sudah menikah: 1
Berhak memilih dalam pemilu.
Meskipun umur baru 16 (belum 17), karena sudahMenikah bernilai true, maka false || true = true.
Operator ! (NOT)
! membalik nilai boolean. true jadi false, false jadi true.
Truth Table NOT
| A | !A |
|---|---|
true | false |
false | true |
Contoh: Cek Apakah Tidak Hujan
#include <iostream>
int main() {
bool hujan = false;
if (!hujan) {
std::cout << "Tidak hujan. Ayo main bola!" << std::endl;
} else {
std::cout << "Hujan. Main di dalam rumah saja." << std::endl;
}
return 0;
}
Output:
Tidak hujan. Ayo main bola!
!false menghasilkan true, jadi blok if yang dijalankan.
Contoh: Cek Apakah Belum Selesai
#include <iostream>
int main() {
bool tugasSelesai = false;
int sisaHalaman = 15;
if (!tugasSelesai) {
std::cout << "Tugas belum selesai!" << std::endl;
std::cout << "Masih ada " << sisaHalaman << " halaman lagi." << std::endl;
}
return 0;
}
Output:
Tugas belum selesai!
Masih ada 15 halaman lagi.
Menggabungkan Beberapa Operator
Kamu bisa menggabungkan &&, ||, dan ! dalam satu kondisi:
#include <iostream>
int main() {
int umur = 15;
bool punyaIzinOrtu = true;
bool sudahDaftar = true;
std::cout << "=== Pendaftaran Ekskul ===" << std::endl;
std::cout << "Umur: " << umur << std::endl;
std::cout << "Izin ortu: " << punyaIzinOrtu << std::endl;
std::cout << "Sudah daftar: " << sudahDaftar << std::endl;
std::cout << std::endl;
// Boleh ikut jika: (umur 13-17) DAN (punya izin ortu) DAN (sudah daftar)
if (umur >= 13 && umur <= 17 && punyaIzinOrtu && sudahDaftar) {
std::cout << "Selamat! Kamu diterima di ekskul." << std::endl;
} else {
std::cout << "Maaf, syarat belum terpenuhi." << std::endl;
}
return 0;
}
Output:
=== Pendaftaran Ekskul ===
Umur: 15
Izin ortu: 1
Sudah daftar: 1
Selamat! Kamu diterima di ekskul.
Contoh: Diskon di Toko
#include <iostream>
int main() {
bool adalahMember = false;
double totalBelanja = 250000;
bool hariSpesial = true;
std::cout << "Member: " << adalahMember << std::endl;
std::cout << "Total belanja: Rp" << totalBelanja << std::endl;
std::cout << "Hari spesial: " << hariSpesial << std::endl;
std::cout << std::endl;
// Dapat diskon jika: member ATAU (belanja >= 200000 DAN hari spesial)
if (adalahMember || (totalBelanja >= 200000 && hariSpesial)) {
std::cout << "Selamat! Kamu dapat diskon 20%!" << std::endl;
double diskon = totalBelanja * 0.2;
std::cout << "Hemat: Rp" << diskon << std::endl;
} else {
std::cout << "Tidak ada diskon hari ini." << std::endl;
}
return 0;
}
Output:
Member: 0
Total belanja: Rp250000
Hari spesial: 1
Selamat! Kamu dapat diskon 20%!
Hemat: Rp50000
Urutan Prioritas (Precedence)
Saat menggabungkan operator, C++ punya urutan prioritas:
| Prioritas | Operator | Arti |
|---|---|---|
| 1 (tertinggi) | ! | NOT |
| 2 | && | AND |
| 3 (terendah) | || | OR |
Artinya: ! diproses duluan, lalu &&, terakhir ||.
// Tanpa tanda kurung:
// a || b && c dibaca sebagai a || (b && c)
// Karena && punya prioritas lebih tinggi dari ||
// Contoh:
bool a = true;
bool b = false;
bool c = true;
// a || b && c
// = true || (false && true)
// = true || false
// = true
Kalau ragu, pakai tanda kurung untuk memperjelas! (a || b) && c berbeda dari a || (b && c). Tanda kurung membuat kode lebih mudah dibaca dan menghindari bug.
Short-Circuit Evaluation
C++ punya fitur pintar: short-circuit evaluation. Artinya, C++ bisa “malas” dan berhenti mengecek lebih awal:
- AND (
&&): Kalau kondisi pertamafalse, kondisi kedua tidak dicek — karena hasilnya pastifalse. - OR (
||): Kalau kondisi pertamatrue, kondisi kedua tidak dicek — karena hasilnya pastitrue.
int x = 0;
// Kondisi kedua tidak akan dicek karena kondisi pertama sudah false
if (x != 0 && 10 / x > 2) {
std::cout << "Aman" << std::endl;
}
// Ini berguna! Tanpa short-circuit, 10/0 akan menyebabkan error.
Short-circuit evaluation bukan hanya soal efisiensi — kadang ini mencegah error. Pada contoh di atas, kita mengecek x != 0 dulu sebelum membagi dengan x. Kalau x nol, pembagian tidak pernah terjadi berkat short-circuit.
Kesalahan Umum
1. Menggunakan & alih-alih &&
// SALAH — & adalah operator bitwise (beda fungsi!)
if (umur > 12 & tinggi > 140) { }
// BENAR — && adalah operator logika AND
if (umur > 12 && tinggi > 140) { }
2. Menggunakan | alih-alih ||
// SALAH — | adalah operator bitwise
if (hari == "Sabtu" | hari == "Minggu") { }
// BENAR — || adalah operator logika OR
if (hari == "Sabtu" || hari == "Minggu") { }
3. Lupa mengulangi variabel di setiap perbandingan
int x = 5;
// SALAH — tidak bisa ditulis begini
// if (x == 3 || 4 || 5) { }
// BENAR — harus tulis lengkap setiap perbandingan
if (x == 3 || x == 4 || x == 5) { }
4. Lupa tanda kurung saat mencampur && dan ||
// Ini mungkin tidak bekerja seperti yang kamu harapkan
// if (a || b && c) — dibaca sebagai if (a || (b && c))
// Lebih aman dan jelas dengan tanda kurung
if ((a || b) && c) { } // kalau memang ini yang dimaksud
Latihan
Latihan 1: Buat program yang mengecek apakah seseorang boleh membuat SIM. Syarat: umur minimal 17 tahun DAN sudah lulus tes tertulis (bool lulusTes). Tampilkan “Boleh buat SIM!” atau “Belum memenuhi syarat.”
Latihan 2: Buat program yang mengecek apakah sebuah angka berada di luar rentang 1-100. Gunakan operator || untuk mengecek apakah angka < 1 ATAU angka > 100. Tampilkan “Angka di luar rentang!” atau “Angka valid.”
Latihan 3: Buat program untuk sistem diskon toko buku:
- Diskon 30% jika: member DAN belanja >= Rp100.000
- Diskon 15% jika: member ATAU belanja >= Rp200.000
- Diskon 0% jika tidak memenuhi syarat apa pun Tampilkan total sebelum dan sesudah diskon.
Untuk Latihan 3, perhatikan urutan pengecekan! Cek kondisi diskon terbesar lebih dulu (30%), baru yang lebih kecil (15%). Kalau dibalik, orang yang harusnya dapat 30% malah dapat 15%.
Ringkasan
| Konsep | Penjelasan |
|---|---|
&& (AND) | true hanya jika kedua kondisi true |
|| (OR) | true jika minimal satu kondisi true |
! (NOT) | Membalik nilai: true jadi false, false jadi true |
| Prioritas | ! > && > || |
| Short-circuit | && berhenti di false pertama, || berhenti di true pertama |
| Cek rentang | Gunakan x >= min && x <= max |
| Tanda kurung | Gunakan () untuk memperjelas urutan evaluasi |
&& vs & | && logika, & bitwise — jangan tertukar! |
Kamu sekarang punya “senjata lengkap” untuk membuat keputusan dalam program: operator perbandingan, if-else, dan operator logika. Dengan tiga alat ini, programmu bisa menangani berbagai skenario dan membuat keputusan cerdas!