Operator logika, relasi dan bitwise

1 Operator logika meliputi: and, or, not, xor

Operator jenis ini menerima nilai boolean sebagai parameter, hasil operasinya juga berupa nilai boolean;

Jika kedua operand bernilai bilangan bulat, maka and/or/not/xor akan berubah menjadi operator bitwise dan menghasilkan bilangan bulat.

2 Operator relasi (perbandingan): =, <>, >, <, <=, >=.

Jika Anda sudah mengenal bahasa keluarga C, perhatikan perbedaan penting berikut:

Pascal hanya menggunakan satu tanda sama untuk pengecekan kesamaan yaitu A = B (bahasa C menggunakan A == B);

Operator penugasan khusus milik Pascal adalah simbol :=.

Operator logika / bitwise memiliki prioritas operasi yang lebih tinggi dibanding operator relasi.

Untuk mengatur urutan perhitungan, sebagian ekspresi harus dibungkus tanda kurung; jika tidak akan terjadi kesalahan logika bahkan gagal dikompilasi.

Contoh salah (muncul error kompilasi)

var
  A, B: Integer;
begin
  if A = 0 and B <> 0 then ... // Penulisan yang salahCode language: JavaScript (javascript)

Penyebab gagal kompilasi:

Aturan prioritas kompiler akan menjalankan operasi bitwise AND di tengah 0 and B terlebih dahulu (menghasilkan bilangan bulat);

Kemudian eksekusi A = (0 and B) untuk mendapatkan nilai boolean;

Akhirnya program mencoba melakukan operasi antara nilai boolean dan bilangan bulat 0, sehingga memicu kesalahan ketidakcocokan tipe (type mismatch).

Cara penulisan yang benar

var
  A, B: Integer;
begin
  if (A = 0) and (B <> 0) then ...Code language: HTML, XML (xml)

Aturan evaluasi hubungan pendek (Short-circuit evaluation)

Gunakan ekspresi if MyFunction(X) and MyOtherFunction(Y) then... sebagai contoh, aturannya sebagai berikut:

  1. Operasi and: jalankan sisi kiri MyFunction(X) terlebih dahulu
    • Jika sisi kiri mengembalikan false, hasil seluruh ekspresi pasti bernilai false, fungsi di sisi kanan MyOtherFunction(Y) tidak akan dijalankan sama sekali.
  2. Operasi or berlaku hal yang sama:
    • Jika sisi kiri sudah mengembalikan true, hasil keseluruhan adalah benar dan kode di sisi kanan tidak dijalankan.

Fitur ini sangat berguna saat pengecekan pointer kosong:

if (A <> nil) and A.IsValid then...Code language: HTML, XML (xml)

Kode tidak akan crash meskipun A adalah pointer kosong nil. Kata kunci nil mewakili pointer kosong, secara numerik setara dengan 0 dan sesuai dengan null di bahasa pemrograman lain.

Klasifikasi operator

Operator relasi (mengembalikan tipe Boolean)

PascalMaknaPadanan di C
=Sama dengan==
<>Tidak sama dengan!=
>Lebih besar dari>
<Lebih kecil dari<
>=Lebih besar atau sama dengan>=
<=Lebih kecil atau sama dengan<=

Operator logika / bitwise

not: NOT logika / invers bitwise and: AND logika / AND bitwise or: OR logika / OR bitwise xor: XOR logika / XOR bitwise

not (NOT)

anot a
truefalse
falsetrue

and (AND, hanya benar jika kedua operand bernilai benar)

aba and b
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

or (OR, benar jika salah satu operand bernilai benar)

aba or b
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

xor (XOR, hanya benar jika nilai kedua operand berbeda)

aba xor b
truetruefalse
truefalsetrue
falsetruetrue
falsefalsefalse

Contoh

Aturan penentuan tahun kabisat

  1. Habis dibagi 4 tetapi tidak habis dibagi 100 → tahun kabisat
  2. Habis dibagi 400 → tahun kabisat, sisanya adalah tahun biasa
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program LeapYearCheck;

// Fungsi pengecekan tahun kabisat, input tahun dan kembalikan nilai boolean
function IsLeapYear(year: Integer): Boolean;
begin
  Result := ((year mod 4 = 0) and (year mod 100 <> 0)) or (year mod 400 = 0);
end;

var
  y: Integer;
begin
  Write('Masukkan tahun: ');
  ReadLn(y);

  if IsLeapYear(y) then
    Writeln(y, ' adalah tahun kabisat')
  else
    Writeln(y, ' adalah tahun biasa');

  ReadLn;
end.Code language: JavaScript (javascript)
  • mod operator sisa bagi, tulisan year mod 4 = 0 berarti tahun habis dibagi 4
  • Ekspresi wajib pakai tanda kurung: operator and prioritasnya lebih tinggi dari operator perbandingan
  • Fitur evaluasi pendek: jika syarat habis dibagi 400 di depan or terpenuhi, syarat 4/100 tidak akan diperiksa

Operator logika, relasi dan bitwise

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *