1 Logische Operatoren umfassen: and, or, not, xor
Diese Operatoren akzeptieren boolesche Werte als Parameter, das Ergebnis der Berechnung ist ebenfalls ein boolescher Wert;
Wenn beide Operanden Ganzzahlen sind, werden and/or/not/xor zu Bitoperatoren und liefern ein ganzzahliges Ergebnis.
2 Relationale (Vergleichs-)Operatoren: =, <>, >, <, <=, >=.
Wenn Sie mit Sprachen der C-Familie vertraut sind, achten Sie unbedingt auf folgende Unterschiede:
Für Gleichheitsprüfungen nutzt Pascal nur ein einzelnes Gleichheitszeichen A = B (C-Sprachen verwenden A == B);
Der spezielle Zuweisungsoperator von Pascal ist das Symbol :=.
Logische / Bitoperatoren haben eine höhere Auswertungspriorität als relationale Operatoren.
Um die Berechnungsreihenfolge zu steuern, müssen manche Ausdrücke mit Klammern umschlossen werden; sonst treten Logikfehler oder ein Kompilierfehler auf.
Falsches Beispiel (verursacht Kompilierfehler)
var
A, B: Integer;
begin
if A = 0 and B <> 0 then ... // Falsche SchreibweiseCode-Sprache: JavaScript (javascript)
Grund für den Kompilierfehler:
Nach den Prioritätsregeln des Compilers wird zuerst der mittlere Bit-AND-Vorgang 0 and B ausgeführt (liefert eine Ganzzahl);
Anschließend wird A = (0 and B) berechnet, wodurch ein boolescher Wert entsteht;
Zuletzt versucht das Programm eine Operation zwischen einem booleschen Wert und der Ganzzahl 0 durchzuführen, was einen Fehler durch Typenkonflikt (type mismatch) auslöst.
Korrekte Schreibweise
var
A, B: Integer;
begin
if (A = 0) and (B <> 0) then ...Code-Sprache: HTML, XML (xml)
Regeln der Kurzschlussauswertung (Short-circuit evaluation)
Nehmen Sie den Ausdruck if MyFunction(X) and MyOtherFunction(Y) then... als Beispiel, die Regeln lauten wie folgt:
and-Operation: Zuerst wird der linke TeilausdruckMyFunction(X)ausgeführt- Wenn der linke Teil
falsezurückgibt, ist das Ergebnis des gesamten Ausdrucks garantiertfalse, die rechte FunktionMyOtherFunction(Y)wird überhaupt nicht ausgeführt.
- Wenn der linke Teil
- Die
or-Operation funktioniert analog:- Wenn der linke Teil bereits
trueliefert, ist das Gesamtergebnis wahr und der rechte Code wird nicht ausgeführt.
- Wenn der linke Teil bereits
Diese Eigenschaft ist bei Nullpointer-Prüfungen äußerst praktisch:
if (A <> nil) and A.IsValid then...Code-Sprache: HTML, XML (xml)
Der Code stürzt nicht ab, selbst wenn A der Nullpointer nil ist. Das Schlüsselwort nil steht für den Nullpointer, ist numerisch gleich 0 und entspricht dem Schlüsselwort null in anderen Sprachen.
Klassifizierung der Operatoren
Relationale Operatoren (liefern Boolean-Werte)
| Pascal | Bedeutung | C-Äquivalent |
|---|---|---|
= | Gleich | == |
<> | Ungleich | != |
> | Größer als | > |
< | Kleiner als | < |
>= | Größer oder gleich | >= |
<= | Kleiner oder gleich | <= |
Logische / Bitoperatoren
not: Logisches NICHT / Bit-Invertierung and: Logisches UND / Bit-UND or: Logisches ODER / Bit-ODER xor: Exklusives ODER / Bit-XOR
not NICHT
| a | not a |
|---|---|
| true | false |
| false | true |
and UND (nur wahr, wenn beide Operanden wahr sind)
| a | b | a and b |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
or ODER (wahr, wenn mindestens einer der Operanden wahr ist)
| a | b | a or b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
xor Exklusives ODER (nur wahr, wenn die Operanden unterschiedliche Werte haben)
| a | b | a xor b |
|---|---|---|
| true | true | false |
| true | false | true |
| false | true | true |
| false | false | false |
Beispiele
Regeln zur Schaltjahr-Erkennung
- Durch 4 teilbar, aber nicht durch 100 → Schaltjahr
- Durch 400 teilbar → Schaltjahr; alle übrigen Jahre sind Gemeinjahre
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program LeapYearCheck;
// Funktion zur Schaltjahrprüfung, nimmt Jahreszahl entgegen und gibt Boolean zurück
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('Geben Sie ein Jahr ein: ');
ReadLn(y);
if IsLeapYear(y) then
Writeln(y, ' ist ein Schaltjahr')
else
Writeln(y, ' ist ein Gemeinjahr');
ReadLn;
end.Code-Sprache: JavaScript (javascript)

modRestoperator,year mod 4 = 0bedeutet, dass das Jahr ohne Rest durch 4 teilbar ist- Ausdrücke müssen geklammert werden: Der
and-Operator hat höhere Priorität als Vergleichsoperatoren - Kurzschluss-Eigenschaft: Wenn die Teilbarkeitsbedingung durch 400 vor dem
orerfüllt ist, werden die Bedingungen für 4 und 100 nicht mehr geprüft
Logische, relationale und Bitoperatoren