
3.3 运算符和表达式
Visual Basic提供了算术运算符、字符运算符、关系运算符、逻辑运算符和日期运算符等,通过运算符把常量、变量、函数等按照一定的规则连接起来的形式,就称为表达式。与运算符相对应,Visual Basic中表达式包括算术表达式、字符表达式、关系表达式、逻辑表达式和日期表达式等。
3.3.1 算术运算符和算术表达式
算术运算符用于数学计算,由算术运算符连接的表达式称为算术表达式。表3-2给出了算术运算符的含义、优先级以及实例。
表3-2 算术运算符含义及运算实例

说明:参与算术运算的操作数应该是数值型数据。如果是数字字符串或逻辑型数据,则系统自动将其转换成数值型数据参加算术运算。
例如:

3.3.2 字符运算符和字符表达式
字符运算符有“&”和“+”,完成字符串的连接运算,由字符运算符连接的表达式称为字符表达式。表3-3给出了字符运算符的含义及实例。
表3-3 字符运算符含义及运算实例

连接运算需要注意以下几点。
(1)当参加运算的操作数都是字符型数据时,两个运算符的作用相同,都是将字符串连接起来,合成一个字符串。
例如:

(2)当“&”连接非字符型数据时,首先将非字符型数据转换成字符型数据,再进行连接。
例如:
"0451" & 12345'结果为"045112345"
(3)当“+”连接非字符型数据时,若一个操作数为数字字符数据,另一个为数值型数据,则先将数字字符数据转换成数值型数据,再进行算术加法运算;若一个操作数为数值型数据,另一个操作数为非数字字符型数据,则系统会提示出错。
例如:

3.3.3 关系运算符和关系表达式
关系运算符又称比较运算符,用以比较两个操作数之间的大小关系,若关系成立,则返回True,否则返回False。关系运算符连接的表达式称为关系表达式。参与关系运算的数据可以是数值型数据、字符型数据和日期型数据。表3-4给出了关系运算符的含义以及实例。
表3-4 关系运算符含义及运算实例

关系运算进行比较时,注意以下规则。
(1)如果参与比较的操作数均为数值型数据,则直接比较其大小。
(2)如果参与比较的操作数均为字符型数据,则字符按ASCII码值、汉字按拼音为序,从左到右依次比较,直到能区分结果为止。
(3)如果两个操作数均为日期型数据,则系统自动将其视为yyyymmdd格式的8位整数,再按照数值比较其大小。
(4)Like运算符通常与通配符“?”“*”“#”“[字符列表]”以及“[!字符列表]”结合使用。在数据库的SQL语句中经常使用,用于模糊查询。其中“?”表示任意一个字符,“*”表示任意0个或多个连续字符,“#”表示任意一个0~9之间的数字,“[字符列表]”表示字符列表中的任意一个字符,“[!字符列表]”表示不在字符列表中的任意一个字符。
例如,查找姓名变量中姓“李”的人员,表达式为:
姓名Like "李*"
(5)所有关系运算符具有相同的优先级,运算时按照从左到右的顺序依次比较。
3.3.4 逻辑运算符和逻辑表达式
逻辑运算符又称布尔运算符,包括Not、And、Or、Xor、Eqv和Imp。其中,比较常用的逻辑运算符包括Not、And、Or。Not运算为单目运算符,其他运算符为双目运算符。由逻辑运算符连接的表达式称为逻辑表达式,逻辑表达式的结果是逻辑值。表3-5给出了逻辑运算符的含义、优先级以及实例。
表3-5 逻辑运算符含义及运算实例

例如,数学中表示Y的值在区间[0,100]之间的表达形式为0≤Y≤100,在Visual Basic中则应表示为:
Y >= 0 And Y <= 100
又如,M能够被4或7整除在Visual Basic中应表示为:
M Mod 4 = 0 Or M Mod 7=0
3.3.5 日期运算符和日期表达式
日期运算符包括“+”和“-”,由日期运算符连接的表达式称为日期表达式。表3-6给出了日期运算符的含义及其运算实例。
表3-6 日期运算符含义及运算实例

注:D1、D2为日期型变量,N为数值型变量,表示天数,且D1=#2013/09/10#,D2=#2013/10/10#,N=10。
例如:

在上述语句中,Y表示的是天数,输出结果为2013-8-18。
3.3.6 表达式的书写规则
由变量、常量、运算符、函数和圆括号等按照一定的规则组成了表达式,产生一个运算结果,运算结果的类型由运算符和操作数共同决定。
书写Visual Basic表达式时应遵循以下书写规则。
(1)表达式从左至右书写,无高低和大小区分,可以用括号( )改变运算次序。例如,数学表达式在Visual Basic中正确的表达形式为(-y)/(2*x)或-y/(2*x),数学表达式28在Visual Basic中正确的表达形式为2^8。
(2)算术运算符中的乘号“*”不能省略。例如,数学表达式4xy在Visual Basic中正确的表达形式为4*x*y。
(3)表达式中只能使用圆括号,并且成对出现。例如,与数学表达式对应的Visual Basic中的表达式为(-b+(b^2-4*a*c)^(1/2))/(2*a)。
3.3.7 运算符的优先级
在每一类运算符中,运算符有优先级,而不同类型的运算符在同一个表达式中出现时,也有运算的优先级。
(1)不同类型的运算符优先级顺序为:先执行算术运算、字符运算和日期时间运算,其次执行关系运算,最后执行逻辑运算。
(2)在同一类运算符中,算术运算符运算顺序为先括号内的,再括号外的;运算符的优先级由高到低依次为:^(乘方)→-(负号)→*(乘)、/(除)→\(整除)→Mod(取模)→+(加)、-(减)。字符运算符优先级相同。日期运算符优先级相同。关系运算符优先级相同。逻辑运算符优先级为:Not(取反)→And(与)→Or(或)、Xor(异或)→Eqv(等价)→Imp(蕴含)。
例如,假设性别="男",出生日期=#1975/10/5#,职称="教授",基本工资=5000,DATE()函数结果中的年按2014年计算,求下面表达式的结果。
性别= "女" OR INT((DATE()-出生日期)/365) > 35 AND NOT(职称= "副教授" _OR基本工资> 6000)
计算过程为:
