(delphi11最新学习资料) Object Pascal 学习笔记---第2章第4.2节(运算符和优先级)

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 中是 !)

​ 与许多其他编程语言不同,逻辑运算符(包括 andornot)的优先级高于比较运算符(包括小于和大于)。所以如果您写:

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

你可能感兴趣的:(Object,Pascal,Handbook,学习,笔记)