运算符
运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作. Pascal允许以下类型的运算符 :
算术运算符
关系运算符
布尔运算符
位运算符
设置运算符
字符串运算符
让我们逐一讨论算术,关系,布尔和位运算符.稍后我们将讨论集合运算符和字符串运算.
算术运算符
下表显示了Pascal支持的所有算术运算符.假设变量 A 保持10,变量 B 保持20
运算符 |
描述 |
示例 |
+ |
添加两个操作数 |
A + B=30 |
- |
从第一个减去第二个操作数 |
A - B=-10 |
* |
将两个操作数相乘 |
A * B=200 |
/ |
将分子除以分母 |
B/A=2 |
% |
模数运算符及其余的整数除法后 |
B%A=0 |
关系运算符
下表显示了Pascal支持的所有关系运算符.假设变量 A 保持10,变量 B 保持20,然后 :
运算符 |
描述 |
示例 |
= |
检查如果两个操作数的值相等或不相等,如果是,则条件变为真. |
(A = B)不成立. |
<> |
检查两个操作数的值是否相等或不,如果值不相等,则条件变为真. |
(A<> B)为真. |
> |
检查左操作数的值是否大于右操作数的值,如果是,则条件成为是真的. |
(A> B)不是真的. |
< |
检查左边是否有值操作数小于右操作数的值,如果是,则条件变为真. |
(A< B)为真. |
> = |
检查价值是否为左操作数大于或等于右操作数的值,如果是,则条件变为真. |
(A> = B)不为真. |
< = |
检查价值是否为左操作数小于或等于右操作数的值,如果是,则条件变为真. |
(A< = B)为真. |
布尔运算符
下表显示了Pascal支持的所有布尔运算符语言.所有这些运算符都处理布尔操作数并生成布尔结果.假设变量 A 保持为真,变量 B 保持为假,然后是 :
运算符 |
描述 |
示例 |
and |
被叫布尔AND运算符.如果两个操作数均为真,则条件成立. |
(A和B)为假. |
然后 |
它类似于AND运算符,但它保证了编译器评估的顺序逻辑表达.从左到右,仅在必要时评估右操作数. |
(A和B)为假. |
or |
被称为布尔运算符.如果两个操作数中的任何一个为真,则条件成立. |
(A或B)为真. |
或者 |
它类似于布尔OR,但它保证了编译器评估的顺序逻辑表达式.从左到右,仅在必要时评估右操作数. |
(A或B)为真. |
不 |
被称为布尔非运算符.用于反转其操作数的逻辑状态.如果条件为真,则Logical NOT运算符将使其为假. |
not(A和B)为真. |
位运算符
按位运算符处理位并执行逐位运算.所有这些运算符都处理整数操作数并生成整数结果.按位和(&),按位或(|)和按位不是(〜)的真值表如下 :
p |
q |
p& q |
p 丨 q |
〜p |
~q |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
假设A = 60;和B = 13;现在采用二进制格式,它们将如下所示;
A = 0011 1100
B = 0000 1101
-----------------
A& B = 0000 1100
A ^ B = 0011 0001
~A = 1100 0011
下表列出了Pascal支持的Bitwise运算符.假设变量A保持60,变量B保持13,则:
运算符 |
描述 |
示例 |
& |
Binary AND Operator将一些内容复制到结果中如果它存在于两个操作数中. |
(A& B)将给出12,即0000 1100 |
丨 |
二进制OR运算符如果在任一操作数中存在,则复制一位. |
(A 丨 B)将给出61,即0011 1101 |
! |
二进制OR运算符如果在任一操作数中存在,则复制一位.与丨相同. |
(A!B)将给出61,即0011 1101 |
〜 |
二元一元补码运算符是一元的,具有'翻转'位的效果. |
(~A)将给出-61,由于带符号的二进制数,它是2的补码形式的1100 0011. |
<< |
二进制左移运算符.左操作数值向左移动右操作数指定的位数. |
A<< 2将给出240,即1111 0000 |
>> |
二进制右移运算符.左操作数值向右移动右操作数指定的位数. |
A>> 2将给出15,即0000 1111 |
请注意,Pascal的不同实现在按位运算符方面有所不同.我们在这里使用的编译器Free Pascal支持以下按位运算符 :
运算符 |
运算 |
非 |
按位NOT |
与 |
按位AND |
或 |
按位OR |
异或 |
按位异或OR |
shl |
按位向左移位 |
shr |
按位向右移位 |
<< |
按位向左移位 |
>> |
按位向右移位 |
运算符优先级
运算符优先级确定表达式中的术语分组.这会影响表达式的计算方式.某些运营商的优先级高于其他运营商;例如,乘法运算符的优先级高于加法运算符.
例如x = 7 + 3 2;这里,x被赋值为13而不是20,因为operator 的优先级高于+,所以它首先乘以3 * 2然后加到7中.
这里,运算符最高优先级显示在表格的顶部,最低的优先级显示在底部.在表达式中,将首先评估更高优先级的运算符.
运算符 |
优先顺序 |
〜,not, |
最高 |
*,/,div,mod,和& |
|
丨,!,+, - 或, |
|
=,<>,<,< =,> ,> =,in |
|
或者,然后 |
最低 |