2.3 表达式与运算符

表达式指将常量、变量、函数等数据通过运算符连接的式子,根据运算对象的数据类型可以分为算术表达式、字符表达式、日期时间表达式、关系表达式和逻辑表达式。常量、变量和函数可以作为表达式的特例。

2.3.1 算术表达式及算术运算符

算术表达式由算术运算符、数值型常量、数值型内存变量、数值型数组、数值类型的字段和返回值为数值型数据的函数组成,结果为数值型数据。

算术运算符的功能及其运算优先级如表2-1所示,表中运算符按优先级别从高到低顺序排列。

表2-1 算术运算符及其优先级

例如,在命令窗口中输入如下命令:

      ?-4*3^2/3%2+18 &&

显示结果为18.00。

注意:比较取余%运算在两个操作数符号相同与相异时的结果。

例如:

      9%7=2            -9%-7=-2
      -9%7=5          9%-7=-5

2.3.2 字符表达式及字符运算符

字符表达式是用字符运算符连接字符型数据的式子,其运算结果仍然是一个字符串或逻辑量,字符运算符有如下两种。

1.连接运算

(1)+:将两个字符串连接起来形成一个新的字符串。

(2)-:去掉前一字符串的尾空格,然后与后面字符串连接起来并把去掉的尾空格放到结果串的末尾。

+和-两种运算符的优先级相同。

例如,在命令窗口中输入如下命令:

      ?"计算机    "+"应用基础"    &&结果为计算机    应用基础
      ?"计算机    "-"应用基础"    &&结果为计算机应用基础
      ?"efg  h  "-"ijk"-"lmn"        &&结果为efg  hijklmn

2.包含运算

包含运算的结果是逻辑值,一般格式为:

      <字符串1>$<字符串2>

若<字符串1>包含在<字符串2>之中,其表达式值为.T.;否则为.F.。

例如,在命令窗口中输入如下命令:

      m= "工程师"
      ? "总工程师"$m, m$"总工程师"    &&结果为.F. .T.

2.3.3 日期时间表达式及日期运算符

日期时间表达式指含有日期型或日期时间型数据的表达式,其运算符只有+和-,合法的日期时间表达式如表2-2所示。

表2-2 合法的日期时间表达式

注意:日期(日期时间型)和日期(日期时间型)相加无意义且出错。

例如,在命令窗口中输入如下命令:

      ?{^2018/08/13}+3     &&结果为08/16/18
      ?{^2018/08/13}-3     &&结果为08/10/18
      ?{^2018/08/16}-{^2018/08/10}    &&结果为6
      ?{^2018/08/13 10:00}-{^2018/08/13 9:00}  &&结果为3600

2.3.4 关系表达式及关系运算符

关系表达式是由关系运算符将两个相同类型(可以是字符型、数值型和日期型)的数据连接起来的式子,一般格式为:

      <表达式1><关系运算符><表达式2>

关系运算可以执行数值比较、字符比较和日期比较,运算结果是逻辑.T.或.F.。关系运算符的优先级相同,其说明如表2-3所示。

表2-3 关系运算符及其说明

各种数据类型的比较规则如下。

(1)数值型数据和货币型数据按数值大小比较,包括负号。

(2)日期时间型数据按年、月、日的先后比较,越早的日期时间越小;越晚的日期时间越大。

(3)逻辑型数据比较.T.比.F.大。

(4)字符型数据按选择“工具”菜单中“选项”选项的设置比较,默认的字符排序次序为“PinYin”。西文字符比较时空格在最前面,小写字母在前,大写字母在后;汉字则按拼音顺序比较。

比较字符串时,先比较两个字符串的第1个字符。若两者不等,其大小决定两字符串的大小;若相等,则各取第二个字符比较,依此类推直到最后。若每个字符都相等,则两个字符串相等。

(5)精确等于“==”,只有在两个字符串完全相同时才为真;非精确等于“=”,当等号右边的串与等号左边的串的前几个字符相同时,运算结果才为真。

例如,在命令窗口中输入命令:

      gb="班长    "
      ?gb="班长"              &&结果为.T.
      ?"班长"=gb              &&结果为.F.
      ?gb=="班长"             &&结果为.F.
      ?"班长"==LEFT(gb,4)    &&结果为.T.

2.3.5 逻辑表达式及逻辑运算符

逻辑表达式是由逻辑运算符将逻辑型数据连接起来的式子,它实际上是一个判断条件,结果为一个逻辑值。其一般格式为:

      <关系表达式1><逻辑运算符><关系表达式2>

逻辑运算符的优先级与说明如表2-4所示,表中运算符按优先级别从高到低顺序排列。

表2-4 逻辑运算符的优先级与说明

说明如下。

(1)运算符两边可以有小圆点,也可以无小圆点。

(2)NOT是单目运算,只作用于后面的一个逻辑操作数。若操作数为真,则NOT操作数返回假;否则返回真。

(3)AND是双目运算,即操作数1 AND操作数2。若操作数1和操作数2同时为真,则表达式值为真;只要其中一个为假,则表达式值为假。

(4)OR是双目运算,即操作数1 O R操作数2。若操作数1和操作数2中有一个为真,则表达式值为真;只有操作1和操作2均为假时,则表达式值为假。

例如,在命令窗口中输入如下命令:

      M=7
      N=9
      ?M>9 OR N=9    &&结果为.T.
      ?M<>6 OR N>6 AND NOT M>6  &&结果为.T.

2.3.6 运算符的优先级

同种类型运算符内部之间的优先级如前所述,不同类型运算符在同一个表达式中的优先顺序为算术运算符→字符串运算符→日期运算符→关系运算符→逻辑运算符;另外表达式中可以用括号改变运算的优先次序,并且括号是可以嵌套的。