1 邏輯運算子包含:and、or、not、xor
此類運算子接收布林值做為參數,運算結果同樣為布林值;
若兩側運算元皆為整數,and/or/not/xor 會轉為位元運算子,運算結果為整數。
2 關係(比較)運算子:=、<>、>、<、<=、>=。
如果你熟悉 C 系列語言,請務必留意以下差異:
Pascal 判斷相等僅使用單一等號 A = B(C 語言使用 A == B);
Pascal 的指定運算子為專用符號 :=。
邏輯/位元運算子的運算優先權高於關係運算子。
若要控制計算順序,部分運算式必須使用括號包覆,否則會發生邏輯錯誤甚至編譯失敗。
錯誤範例(編譯報錯)
var
A, B: Integer;
begin
if A = 0 and B <> 0 then ... // 錯誤寫法Code language: JavaScript (javascript)
編譯失敗原因:
編譯器優先權規則會先執行中間的位元及運算 0 and B(結果為整數);
接著執行 A = (0 and B),得到布林值;
最後程式嘗試將布林值與整數 0 進行運算,觸發型別不相符(type mismatch)錯誤。
正確寫法
var
A, B: Integer;
begin
if (A = 0) and (B <> 0) then ...Code language: HTML, XML (xml)
短路求值規則(Short-circuit evaluation)
以運算式 if MyFunction(X) and MyOtherFunction(Y) then... 為例,規則如下:
and運算:優先執行左側MyFunction(X)- 若左側回傳
false,整個運算式結果必定為false,右側函式MyOtherFunction(Y)完全不會執行。
- 若左側回傳
or運算同理:- 若左側已回傳
true,整體結果一定為真,右側程式碼不再執行。
- 若左側已回傳
此特性在空指標判斷時非常實用:
if (A <> nil) and A.IsValid then...Code language: HTML, XML (xml)
即便 A 是空指標 nil,程式也不會崩潰。關鍵字 nil 代表空指標,數值層面等同 0,對應其他語言的 null。
運算子分類
關係運算子(回傳布林值)
| Pascal | 含義 | C 對應寫法 |
|---|---|---|
= | 等於 | == |
<> | 不等於 | != |
> | 大於 | > |
< | 小於 | < |
>= | 大於等於 | >= |
<= | 小於等於 | <= |
邏輯/位元運算子
not:邏輯非/位元反轉 and:邏輯及/位元及 or:邏輯或/位元或 xor:邏輯互斥或/位元互斥或
not 非
| a | not a |
|---|---|
| true | false |
| false | true |
and 及(兩者皆真才為真)
| a | b | a and b |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
or 或(任一為真即為真)
| a | b | a or b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
xor 互斥或(兩側值不同才為真)
| a | b | a xor b |
|---|---|---|
| true | true | false |
| true | false | true |
| false | true | true |
| false | false | false |
範例
閏年判斷規則
- 可被 4 整除,但無法被 100 整除 → 閏年
- 可被 400 整除 → 閏年 其餘皆為平年
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program LeapYearCheck;
// 判斷閏年函式,輸入年份,回傳布林值
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('請輸入年份:');
ReadLn(y);
if IsLeapYear(y) then
Writeln(y, ' 是閏年')
else
Writeln(y, ' 是平年');
ReadLn;
end.Code language: JavaScript (javascript)

mod取餘運算子,year mod 4 = 0代表可被 4 整除- 運算式必須加上括號:
and優先權高於比較運算子 - 短路特性:若
or前方符合 400 整除條件,便不會再執行 4/100 的判斷
邏輯、關係與位元運算子
Previous: if 條件判斷
Next: 多值條件判斷(case 敘述)