Belajar C++
ID | EN

Operator Logika

30 menit Pemula

Tujuan Pembelajaran

  • Memahami operator logika: && (AND), || (OR), ! (NOT)
  • Membaca dan membuat truth table
  • Menggabungkan operator perbandingan dengan operator logika
  • Mengetahui urutan prioritas operator logika

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

OperatorNamaArtiContoh
&&ANDKedua kondisi harus trueumur > 12 && tinggi > 140
||ORMinimal satu kondisi truepunyaTiket || punyaVIP
!NOTMembalik nilai boolean!hujan

Operator && (AND)

&& menghasilkan true hanya jika kedua kondisi bernilai true. Kalau salah satu saja false, hasilnya false.

Truth Table AND

ABA && B
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

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

ABA || B
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

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
truefalse
falsetrue

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:

PrioritasOperatorArti
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 pertama false, kondisi kedua tidak dicek — karena hasilnya pasti false.
  • OR (||): Kalau kondisi pertama true, kondisi kedua tidak dicek — karena hasilnya pasti true.
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

KonsepPenjelasan
&& (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 rentangGunakan x >= min && x <= max
Tanda kurungGunakan () 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!