Logika · Pelajaran 7 dari 9
Gerbang logika dan rangkaian sederhana
8 menit baca · BelajarCode
Di dalam chip, operator logika diwujudkan sebagai gerbang logika, yaitu rangkaian transistor kecil yang menerima satu atau dua sinyal listrik (0 atau 1) dan menghasilkan satu sinyal keluaran.
| Gerbang | Keluaran bernilai 1 jika | Sama dengan |
|---|---|---|
| NOT | Masukannya 0 | Membalik sinyal |
| AND | Kedua masukan 1 | Operator AND |
| OR | Minimal satu masukan 1 | Operator OR |
| XOR | Kedua masukan berbeda | Exclusive OR |
| NAND | Tidak kedua masukan 1 | NOT dari AND |
Komputer menjumlah dengan gerbang logika
Bagaimana komputer menghitung 1 + 1? Dalam biner, 1 + 1 = 10: tulis 0, simpan 1. Rangkaian yang menjumlahkan dua bit disebut half adder, dan ternyata hanya butuh dua gerbang:
- Hasil (sum) = A XOR B
- Simpanan (carry) = A AND B
| A | B | Simpanan (AND) | Hasil (XOR) | Artinya |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 + 0 = 0 |
| 0 | 1 | 0 | 1 | 0 + 1 = 1 |
| 1 | 0 | 0 | 1 | 1 + 0 = 1 |
| 1 | 1 | 1 | 0 | 1 + 1 = 10 |
1def half_adder(a, b):2 hasil = a ^ b3 simpanan = a & b4 return simpanan, hasil56for a in [0, 1]:7 for b in [0, 1]:8 simpanan, hasil = half_adder(a, b)9 print(f"{a} + {b} = {simpanan}{hasil}")0 + 0 = 00 0 + 1 = 01 1 + 0 = 01 1 + 1 = 10
Di Python, ^ adalah XOR dan & adalah AND untuk bit. Dengan merangkai banyak penjumlah seperti ini, prosesor bisa menjumlahkan bilangan 64 bit dalam sekejap.
Gerbang serba bisa
Gerbang NAND disebut gerbang universal, karena semua gerbang lain bisa dibuat hanya dari NAND. Banyak chip memanfaatkan sifat ini supaya pabrik cukup membuat satu jenis gerbang dalam jumlah besar.
Cek pemahaman
Gerbang apa yang menghasilkan 1 hanya jika kedua masukannya berbeda?
Latihan
Semua dari NAND
Buat fungsi nand(a, b). Lalu buat fungsi NOT dan AND hanya dengan memanggil nand. Petunjuk: NOT a sama dengan NAND(a, a), dan AND sama dengan NOT dari NAND.
Pembahasan
1def nand(a, b):2 return 0 if (a == 1 and b == 1) else 134def tidak(a):5 return nand(a, a)67def dan(a, b):8 return tidak(nand(a, b))910print("NOT 0 =", tidak(0), " NOT 1 =", tidak(1))11for a in [0, 1]:12 for b in [0, 1]:13 print(a, "AND", b, "=", dan(a, b))NOT 0 = 1 NOT 1 = 0 0 AND 0 = 0 0 AND 1 = 0 1 AND 0 = 0 1 AND 1 = 1
NAND(a, a) bernilai 0 hanya jika a = 1, jadi sama dengan NOT. Membalik NAND dengan NOT menghasilkan AND kembali.
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.