- Visual FoxPro程序设计
- 黄玲芳 刘建兰主编
- 1772字
- 2025-02-20 13:33:55
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 运算符的优先级
同种类型运算符内部之间的优先级如前所述,不同类型运算符在同一个表达式中的优先顺序为算术运算符→字符串运算符→日期运算符→关系运算符→逻辑运算符;另外表达式中可以用括号改变运算的优先次序,并且括号是可以嵌套的。