4.Object Pascal运算符与表达式
运算就是对数据的加工和处理过程,运算符是在代码中对各种数据类型的值进行运算的符号。
在Object Pascal中,运算符分为:单目运算符和双目运算符。
表达式是表示某个求值规则的运算公式,由运算符和圆括号将常量、变量、函数、对象等操作数组合而成。
4.1算术运算符与算术表达式
1.算术运算符
Object Pascal 中的算术运算符:
运算符 | 名称 | 例子 | 运算符 | 名称 | 例子 |
---|---|---|---|---|---|
+ | 取正 | +a | Div | 整数除 | a Div b |
- | 取负 | -b | Mod | 求余 | a Mod b |
* | 乘 | a*b | + | 加 | a+b |
/ | 除 | a/b | - | 减 | a-b |
-
运算结果自动向高精度转化;
-
除法运算 / 的数无论是整型还是实型,结果都是实型;
-
Div 和 Mod 的运算数必须是整数,结果是整型;
2.算术运算符的优先级
运算符 | 优先级 |
---|---|
+ 取正、- 取负 | 1 |
*、/ | 2 |
Div、Mod | 3 |
+、- | 4 |
同级运算自左至右进行运算,表达式中右圆括号,则先计算括号内的表达式,如果有多层括号,先计算内层括号中的表达式。
3.算术表达式
符合 Object Pascal 规定的算术表达式要考虑三个方面:语法、优先级、类型。我们举例说明:
例如:
数学式 | 算术表达式 |
---|---|
x/(yz) | x/(y*z) |
(2x-y)/x | (2.0*x-y)/x |
lg4.5+0.3ln4.5 | log10(4.5)+0.3*ln(4.5) |
(5x^2.3+3)/(3/5) | (5*Power(x, 2.3)+3.0)/(3.0/5.0) |
4.2逻辑运算符与布尔表达式
4.2.1逻辑运算符
逻辑运算符包括:布尔运算符、位运算符和关系运算符。
1.布尔运算符
布尔运算符只能对布尔型操作数进行运算,结果为布尔型。基本的布尔运算符:
-
NOT “非”运算符
计算运算数的相反数,单目运算符。
x NOT x True False False True -
AND “与”运算符
只有当两个操作数都为True时,运算结果才为True。
x y x AND y False False False False True False True True True True Flase False -
OR “或”运算符
只要两个操作数中有一个是True,运算结果就为True。
x y x OR y False False False False True True True True True True False True -
XOR “异或”运算符
当两个操作数不同时运算结果为True
x y x XOR y Flase False False False True True True True False True False True
2.位运算符
位运算是对整型操作数的二进制位执行操作,“位”是指二进制比特,按位运算是指不考虑相邻的运算结果,只计算两个操作数中对应的位。
位运算符
操作符 | 举例 | 功能说明 |
---|---|---|
NOT | NOT x | 将x的二进制位每位求反,即1变为0,0变为1。 |
AND | x AND y | 将两个操作数对应的位进行与运算,同为1时结果为1 |
OR | x OR y | 将两个操作数对应的位进行或运算,同为0时结果为0 |
XOR | x XOR y | 将两个操作数对应的位进行异或运算,对应位不同时为1 |
SHL | x SHL y | 将x的二进制位向左移动y位,左移1位相当于乘2 |
SHR | x SHR y | 将x的二进制位向右移动y位,右移1位相当于除2 |
示例:
x | y | 操作 | 结果 |
---|---|---|---|
00100011 | NOT x | 11011100 | |
00100011 | 11101110 | x AND y | 00100010 |
00100011 | 11101110 | x OR y | 11101111 |
00100011 | 11101110 | x XOR y | 11001100 |
124=11111100 | 2 | x SHL y | 11111000 |
124=11111100 | 2 | x SHR y | 01111110 |
3.关系运算符
关系运算符用于比较两个同类型的数据的值,其结果为布尔型。
关系运算符
关系运算符 | 操作 | 操作数类型 |
---|---|---|
= | 等于 | 简单类型、字符串、可变类型、类、类引用、指针、集合类型 |
<> | 不等于 | 简单类型、字符串、可变类型、类、类引用、指针、集合类型 |
< | 小于 | 简单类型、字符串、可变类型 |
> | 大于 | 简单类型、字符串、可变类型 |
<= | 小于等于 | 简单类型、字符串、可变类型、集合类型 |
>= | 大于等于 | 简单类型、字符串、可变类型、集合类型 |
集合类型的关系运算: 假设A和B是两个集合,则:
-
若A和B的元素完全相同,则A=B为True,否则A<>B为True;
-
若A的任何一个元素也是B的元素,则A<=B为True,并称A是B的子集;
-
若B的任何一个元素也是A的元素,则A>=B为True,并称B是A的子集;
4.2.2布尔表达式
布尔表达式由布尔运算符和布尔类型的操作数组成。利用布尔表达式可以描述比较复杂的判断条件。
例如:要描述实数是否在区间[10,100]内,则布尔表达式:
(x >= 10.0) and (x <= 100.0)
要描述实数是否在区间[10,100]之外,则布尔表达式:
(x < 10.0) or (x > 100.0)
4.3字符串运算符
Object Pascal的字符串运算符:+,用于连接两个或更多的字符串。
字符串表达式的格式:
<字符串表达式> + {<字符串>|<字符>}
示例:
'Hello world' + '!' // 结果为'Hello world!' 'Delphi' + '程序设计' // 结果为'Delphi程序设计' '12 3' + '4' + '5' + 'abc' + 'xyz' // 结果为'12 345abcxyz'
4.4运算符的优先级
除了以上运算符外,还有指针运算符、集合运算符、类运算符和取地址运算符等(这些我们在后面的内容中逐步学习),所有运算符都具有优先级,Object Pascal中运算符的优先级:
优先级 | 运算符 | 描述 |
---|---|---|
1 | @、NOT、+、- | 单目运算符 |
2 | *、/、DIV、MOD、AND、SHL、SHR | 乘除及部分逻辑运算符 |
3 | +、-、OR、XOR | 加减及或运算符 |
4 | =、<>、<、>、<=、>=、in、is | 关系、集合成员及类型比较运算符 |
以上运算符中有一部分是目前为止我们没有学习过的,在后面的章节中会逐步学习到。