Object Pascal 手册,Delphi 11 编程语言的完整介绍 作者: Marco Cantu 笔记:豆豆爸
2.4.2 运算符和优先级
表达式由应用于值的运算符组成。正如我之前提到的,大多数运算符在各种编程语言中都是相当直观的,比如基本的匹配和比较运算符。在本节中我将仅突出 Object Pascal 运算符的特定方面。
您可以看到下面按优先级分组的语言运算符列表,并与 C#、Java 和 Objective-C 中的运算符进行比较(以及基于 C 语言语法的大多数语言)。
关系和比较运算符(最低优先级)
=:测试是否相等(在 C 中是 ==)<>:测试是否不相等(在 C 中是 !=)<:测试是否小于>:测试是否大于<=:测试是否小于或等于,或者是集合的子集>=:测试是否大于或等于,或者是集合的超集in:测试一个条目是否是集合的成员is:测试对象是否与给定类型兼容(在第 8 章中介绍)或是否实现了给定接口(在第 11 章中介绍)
加法运算符
+:算术加法、集合求并、字符串连接、指针偏移量加法-:算术减法、集合求差、指针偏移量减法or:布尔或者位或(在 C 中是 || 或 |)xor:布尔或者位异或(在 C 中是 ^)
乘法和位运算符
*:算术乘法或集合求交集/:浮点数除法div:整数除法(在 C 中这也使用 /)mod:求模(整数除法的余数)(在 C 中是 %)as:允许在运行时进行检查类型的转换(在第 8 章中介绍)and:布尔或者位与(在 C 中是 && 或 &)shl:位左移(在 C 中是 <<)shr:位右移(在 C 中是 >>)
一元运算符(最高优先级)
@:变量或函数的内存地址(返回一个指针,在 C 中是 &)not:布尔或者位非(在 C 中是 !)
与许多其他编程语言不同,逻辑运算符(包括 and、or 和 not)的优先级高于比较运算符(包括小于和大于)。所以如果您写:
a < b and c < d
编译器将首先执行 and 操作,通常导致表达式中的类型兼容性编译器错误。如果要测试两个比较,您应该将每个小于表达式括在括号中:
(a < b) and (c < d)
对于数学运算而言,通常的规则也适用,乘法和除法的优先级高于加法和减法。前两个表达式是等效的,而第三个是不同的:
10 + 2 * 5 // 结果是 20
10 + (2 * 5) // 结果是 20
(10 + 2) * 5 // 结果是 60
小贴士: 在某些情况下,括号可能不是必需的,因为您可以依赖语言运算符优先级规则,但是仍然建议添加它们,因为这些规则取决于编程语言,并且对于以后阅读或修改代码的任何人来说清晰总是好的。
一些运算符在与不同数据类型一起使用时意义不同。例如,+ 运算符可用于两个数字相加,连接两个字符串,求两个集合的并集,甚至为指针添加偏移量(如果具体的指针类型启用了指针运算):
10 + 2 + 11
10.3 + 3.4
'Hello' + ' ' + 'world'
然而,您不能像在 C 中那样做两个字符的加法。
div是一个不寻常的运算符。在 Object Pascal 中,您可以使用 / 运算符除以任意两个数字(实数或整数),并且无论如何都会得到一个实数结果。如果需要除以两个整数并且想要一个整数结果,可以使用 div 运算符。以下是两个赋值的示例(随着我们在下一章中介绍数据类型,代码将变得更加清晰):
RealValue := 123 / 12;
IntegerValue := 123 div 12;
为确保整数除法没有余数,您可以使用 mod 运算符并检查结果是否为零,就像在以下布尔表达式中一样:
(x mod 12) = 0
本文详细介绍了ObjectPascal编程语言中的运算符及其优先级,比较了它与C#,Java和Objective-C的区别,特别强调了逻辑运算符、比较运算符、数学运算和特殊运算符如div、mod的用法,以及括号在确保正确计算中的重要性。
&spm=1001.2101.3001.5002&articleId=135616004&d=1&t=3&u=0403f1a09e464f3f812066388d6aa753)
375

被折叠的 条评论
为什么被折叠?



