运算符——用来对运算对象进行各种运算的操作符号。
表达式——由多个运算对象和运算符组合在一起的合法算式。
其中运算对象包括常数、常量、变量和函数,而常数、常量、变量和函数可以看作没有运算符的表达式。
VB中的运算符分五类——算术运算符、连接运算符、关系运算符、逻辑运算符和特殊运算符;
VB中的表达式有三种——算术表达式、关系表达式和逻辑表达式。
一、算术运算符
算术运算符——用来进行数学运算的运算符。
VB中主要的算术运算符见下表:
运算符 |
说明 |
示例 |
操作数类型 |
^ |
指数 |
Test=3^2 表示3的2次方'结果为9 |
nteger,Long,Single,Double,Currency |
- |
取负 |
-7 |
|
* |
乘法 |
Test=37*16 |
Integer,Long,Single,Double,Currency |
/ |
浮点数除法 |
Test=37/16 '结果为2.3125 |
Integer,Long,Single,Double,Currency |
\ |
整数除法 |
Test=37\16 '结果为2 |
Integer,Long |
MOD |
求余数 |
Test=37 MOD 16 '结果为5 |
Integer,Long |
+ |
加法 |
Test=37+16 |
Integer,Long,Single,Double,Currency |
- |
减法 |
Test=37-16 |
Integer,Long,Single,Double,Currency |
1、^(幂运算符)
幂运算符用来计算某个数或表达式的某次方的值。其中,幂运算符右边的数或表达式是次方数。例如:
Private Sub Form_Paint()
Dim MyValue as Integer MyValue = 2 ^ 2 ' 返回 4 Print MyValue
End Sub
同样:
MyValue = 3 ^ 3 ^ 3 ' 返回 19683
MyValue = (-5) ^ 3 ' 返回 -125
2、* (乘法运算符)
乘法运算符用来计算两个数或表达式的积。例如:
Dim MyValue
MyValue = 2 * 2 ' 返回 4。
MyValue = 459.35 * 334.90 ' 返回 153836.315。
3、浮点数除法(/)与整数除法(\)
浮点数除法执行标准除法操作;整数除法执行整除运算,结果为整形值,且不进行四舍五入(如3\2=1),其操作数一般为整形数,如果是小数,首先被四舍五入为整形或长整形数,再进行整除运算,如:
25.63\6.78=3。
4、取模运算Mod
取模运算Mod用来求余数,其结果为第一个操作数整除第二个操作数所得的余数。如:
21 Mod 4=1; 25.68Mod 6.99=5
二、连接运算符
连接运算符就是将两个表达式连接在一起。
用来进行连接运算的运算符有两 个:“&”和”+”。
“&”运算用来强制两个表达式作字符串连接,而“+”运算则有些不同,如果两个表达式都为字符串时,则将两个字符串连接(相接);如果一个是字符串(数字形)而另一个是数字则进行相加操作。
如下表比较了两种连接运算的不同结果:
表达式1 |
表达式2 |
进行"&"运算的结果 |
进行"+"运算的结果 |
"123" |
"3" |
"1233" |
"1233" |
123 |
3 |
"1233" |
126 |
"123" |
3 |
"1233" |
126 |
"123a" |
3 |
"123a3" |
报错 |
"hello" |
"World" |
"hello World" |
"hello World" |
在使用“+”运算符时有可能无法确定是做加法还是做字符串连接。为避免混淆,可使用 & 运算符进行字符串连接,从而改进了程序代码的可读性。
三、关系运算符(比较运算符)
关系运算符是用来比较两个数或表达式的运算符,它的主要作用是确定表达式之间关系,运算的结果可分为True和False和Null,只要运算的双方有任何一方是Null,结果还是Null。
用关系运算符连接两个算术表达式所组成的式子叫做关系表达式。
其使用说明如下:
Result = Expression1 Comparisonoperator Expression2 (结果变量= 表达式1 关系运算符 表达式2)
其中:
Result(结果变量)可以是任何数值变量;
Expression1(表达式1),Expression2(表达式2)可以是任何表达式;
Comparisonoperator(关系运算符)可以是任何关系运算符。
下表所示为一系列关系运算符以及判定Result 是 True、False 还是 Null 的条件:
关系运算符使用说明
运算符 |
True if |
False if |
Null if |
< |
Expression1<Expression2 |
Expression1>=Expression2 |
Expression1 or Expression=Null |
<= |
Expression1<=Expression2 |
Expression1>Expression2 |
Expression1 or Expression=Null |
> |
Expression1>Expression2 |
Expression1<=Expression2 |
Expression1 or Expression=Null |
>= |
Expression1>=Expression2 |
Expression1<Expression2 |
Expression1 or Expression=Null |
= |
Expression1=Expression2 |
Expression1<>Expression2 |
Expression1 or Expression=Null |
<> |
Expression1<>Expression2 |
Expression1=Expression2 |
Expression1 or Expression=Null |
在比较两个表达式的时候可能难以确定将要比较的表达式是进行数字比较还是字符串比较。下表说明表达式如何进行比较,或说明当其中一个表达式是Variant类型时,如何获得比较的结果。
表达式的比较方式:
条件
|
执行结果
|
两个表达式都是数值数据类型(Byte、Boolean、Integer、Long、Single、Double、Date、Currency或Decimal) |
进行数值比较 |
两个表达式都是String
|
进行字符串比较
|
一个表达式是数值数据类型而另一个是数字Variant、或可以为一数字
|
进行数值比较 |
一个表达式是数值数据类型而另一个是不能转换成数字的字符串Variant
|
产生类型不匹配的错误 |
一个表达式是String,而另一个是除了Null以外的任何Variant
|
进行字符串比较 |
一个表达式是Empty而另一个是数值数据类型
|
进行数值比较,使用0作为Empty表达式
|
一个表达式是Empty而另一个是String
|
进行字符串比较,使用长度为零的字符串("")作为Empty表达式
|
如果 Expression1 和 Expression2 都是 Variant 类型的表达式, 则它们的内部数据的类型决定了比较方式。下表说明如何比较表达式,或指出通过比较得到的结果,此结果由 Variant量的内部数据的类型来决定。
Variant类型的表达式的比较方式
条件 |
执行结果 |
两个Variant表达式都是数值
|
进行数值比较
|
两个Variant表达式都是字符串
|
进行字符串比较
|
一个Variant表达式是数值而另一个是字符串
|
数值表达式小于字符串表达式
|
一个Variant表达式是Empty而另一个是数值
|
进行数值比较,使用0作为Empty表达式
|
一个Variant表达式是Empty而另一个是字符串 |
进行字符串比较,使用长度为零的字符串("")作为Empty表达式
|
两个Variant表达式都是Empty
|
表达式相等
|
当一个Single类型 与一个Double类型作比较时,Double类型会进行舍入处理而与此Single有相同的精确度。
如果一个 Currency型 与一个 Single型 或 Double型 进行比较,则 Single型或Double型转换成一个Currency型。与此相似,当一个Decimal型要与一个Single型或Double型进行比较时,Single型或Double型会转换成一个Decimal(十进制)型。对于Currency型,任何小于 0.0001 的小数将被舍弃,对于 Decimal型,任何小于 1E-28 的小数将被舍弃,或者可能产生溢出错误。舍弃这样的小数部分会使原来不相等的两个数值经过比较后相等。
关系运算符用于两个表达式的比较,其结果为True或False。它们的应用示例如表3-12所示。读者使用关系运算符时可以此表作为参考。
关系运算符操作示例
运算符(名称) |
适用操作数类型 |
示例 |
结果 |
= (等于) |
全部 |
1=1 |
True |
> (大于) |
全部 |
1>2 |
False |
< (小于) |
全部 |
3<5 |
True |
<> (不等于) |
全部 |
"He"<>"She" |
True |
>= (大于等于) |
全部 |
4>=4 |
True |
<= (小于等于) |
全部 |
"ab"<="ac" |
True |
四、逻辑运算符
逻辑运算符通常用来表示比较复杂的关系。例如中国的球迷就经常面对这样的一个条件:中国足球队只要战平或者战胜××队就可以冲出亚洲走向世界。这个条件如果用VB来表示,应该这样写:If 中国足球队战平××队OR中国足球队战胜××队then冲出亚洲走向世界。
在这个条件中的OR运算符就是逻辑运算符,它表示“或者”的意思,当两个条件中的任意一个为TRUE时,整个条件就为TRUE。
下表给出了逻辑运算符的功能。
逻辑运算符使用说明
运算符(名称) |
用法及所明 |
Not (逻辑非)
And (逻辑与)
Or (逻辑或)
Xor (异或)
Eqv (逻辑相等)
Imp (蕴涵) |
Not a 若a为True,则结果为False;否则结果为True
a And b 当且仅当a,b同为True时,结果为True,否则结果为False
a Or b 当且仅当a,b同为False时,结果为False,否则结果为True
a Xor b a,b不同时,结果为True,否则结果为False
a Eqv b a,b相同时,结果为True,否则结果为False
a Imp b 当且仅当a为True,同时b为False时,结果为False,否则结果为True |
需要说明一下的是运算符Imp,它表示的逻辑关系是:当A为False或者B为True结果才为“True”,否则为“False”。
如下表列出了VB中所有的逻辑运算符和它们表示的逻辑关系,为了便于读者阅读,在表中以”1”代表True,以”0”代表False。
逻辑运算符和它们表示的逻辑关系
条件a |
条件b |
not a |
a or b |
a and b |
a xor b |
a equ b |
a imp b |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
逻辑运算符举例:见教材P55—P57。
五、特殊运算符
VB提供了两种特殊运算符:Is和Like。它们应归于比较运算符。
1、Is 运算符
比较两个对象变量的引用变量,返回结果为True或False。
语法格式:
Result=Object1 Is Object2
Is运算的语法说明:
部分 |
描述 |
Result Object1 Object2 |
任何数值变量 任何对象变量名称 任何对象变量名称 |
如果变量Object1和Object2两者引用相同的对象,则Result为True;否则,Result为False。
示例:
Dim MyObject,YourObject,ThisObject,OtherObject,ThatObject,MyCheck '定义变量
··· '给变量赋值
Set YourObject=MyObject '指定对象引用 Set ThisObject=MyObject Set ThatObject=OtherObject '假设MyObject<>OtherObject MyCheck=YourObject Is ThisObject '返回True MyCheck=ThatObject Is ThisObject '返回False
2、Like 运算符
把一个字符串表达式与一个给定模式(SQL表达式中的样式)进行匹配,匹配成功返回结果True,否则返回结果False。主要用于数据库中的查询。
语法格式:
Result=String Like Pattern(注:式样、模型)
Like 运算符的语法说明:
部分 |
描述 |
Result |
任何数值变量 |
String |
任何字符串表达式 |
Pattern |
任何字符串表达式,并且遵循“说明”中的模式匹配约定 |
使用like 运算符时应注意:
如果string与模式表达式pattern匹配,则结果为true,否则结果为false。但是如果String或Pattern中有一个为Null,则Result为Null。
Like运算符内建的模式匹配功能提供了多种方式来进行字符串比较。有的模式匹配功能就可以使用通配符、字符列表或字符区间的任何组合来匹配字符串。
pattern中匹配字符以及它们相应的匹配内容如下表:
pattern中的匹配字符 |
string中相应的匹配内容 |
? * # [charlist] [!charlist] |
任何单一字符 零个或多个字符 任何一个数字(0-9) charlist中的任何单一字符 不在charlist中的任何单一字符 |
说明:在中括号 ([ ]) 中,可以用由一个或多个字符组成的集合与 String 中的任一字符进行匹配,这个集合几乎可以包括所有字符和数字。
通过在范围的上、下限之间用连字符 (-),Charlist 可以指定字符的范围。例如,如果 String 中相应字符的位置包括 A-Z 之间的任意大写字母,则 [A-Z] 得到一个匹配模式。不需要分界符的情况下,方括号内就可以包括多个范围。
下面列举的是模式匹配的其它重要规则:
Charlist 开头的惊叹号 (!) 意味着,如果在 String 中相应位置上找到任何不属于集合Charlist 的字符,则在相应位置上匹配成功。如果在方括号之外使用惊叹号,则它被认为是普通字符,只能与自身匹配。
连字符 (-) 可以出现在 Charlist 的开头(如果使用惊叹号,则在惊叹号之后),也可以出现在 Charlist 的结尾与自身相匹配。在任何其它地方,连字符用来识别字符的范围。
指定了字符范围时,这些字符必须按照升序(从最小到最大)顺序来显示。[A-Z] 是有效模式,但 [Z-A] 不是。
字符序列 [] 被看作是长度为零的字符串 ("")。
为更好地理解Like 运算符的使用,示例如下:
Dim MyCheck '定义变量
MyCheck = "aBBBa" Like "a*a" '"BBB"与"*"相匹配,返回结果True。
MyCheck = "F" Like "[A-Z]" '"F"与字符范围列表"[A-Z]"匹配,返回结果True。
MyCheck = "F" Like "[!A-Z]" '"F"与字符范围列表"[!A-Z]"不匹配,返回结果 False。
MyCheck = "a2a" Like "a#a" '数字2与"#"匹配,返回结果True。
MyCheck = "aM5b" Like "a[L-P]#[!c-e]" '字母"M"字与符集合[L-P]匹配,字母"b"与字符集合[!c-e]匹配,最后返回结果True。
MyCheck = "BAT123khg" Like "B?T*" '字母"A"与"?"匹配,字符串"123khg"与"*"匹配,所以返回结果 True。
注意:为了与左括号 ([)、问号 (?)、数字符号 (#) 和星号 (*) 等特殊字符进行匹配,可以将它们用方括号括起来。不能在一个集合内使用右括号 (]) 与自身匹配,但在组外可以作为个别字符使用。
六、运算符的优先级
在一个表式中进行若干操作时,每一部分都会按预先确定的顺序进行计算求解,称这个顺序为运算符的优先顺序。一般顺序如下:
函数运算→算术运算→连接运算→关系运算→逻辑运算。
对于算术运算符、比较运算符和逻辑运算符,它们的优先级如下表,按照从左到右,从上到下优先级依次减小。
算术 |
比较(关系) |
逻辑 |
指数运算(^) |
相等(=) |
Not |
负数(-) |
不等(<>) |
And |
乘法和除法(*/) |
小于(<) |
Or |
整数除法(\) |
大于(>) |
Xor |
求模运算(Mod) |
小于或等于(<=) |
Eqv |
加法和减法(+-) |
大于或等于(>+) |
Imp |
字符串连接(&) |
Like |
|
|
Is |
|
说明:
当乘法和除法同时出现在表达式中时,每个运算也都按照它们从左到右出现的顺序进行计算。可以用括号改变优先顺序,强令表达式的某些部分优先运行。括号内的运算总是优先于括号外的运算。但是,在括号之内,运算符的优先顺序不变。
字符串连接运算符 (&) 不是算术运算符,但是,就其优先顺序而言,它在所有算术运算符之后,而在所有比较运算符之前。
Like和Is运算符的优先顺序与所有比较运算符都相同。
上述操作顺序有一个例外,就是当幂和负号相邻时,负号优先。如4^-2的结果是4的负2次方。
七、表达式
1、表达式的组成
表达式由变量、常量、运算符、函数和圆括号按一定的规则组成,表达式的运算结果的类型由参与运算的数据类型和运算符共同决定。
2、表达式的种类
根据表达式中运算符的类别可以将表达式分为算术表达式、字符串表达式、日期表达式、关系表达式和逻辑表达式等。
3、表达式的书写规则
每个符号占1格,所有符号都必须一个一个并排写在同一基准上,不能出现上标和下标。
不能按常规习惯省略的乘号*,如:2x要写成2*x。
只能使用小括号(),且必须配对。
不能出现非法的字符,如π。
4、表达式中不同数据类型的转换
如果表达式中操作数具有不同的数据精度,则将较低精度转换为操作数中精度最高的数据精度,即按Integer、Long、Single、Double、Currency的顺序转换,且Long型数据和Single型数据进行运算时,结果总是Double型数据。
八、语句
1、赋值语句
VB的程序代码由语句、常数和声明部分组成。其中使用频率最高的语句就是赋值语句,使用赋值语句可以在程序运行中改变对象的属性和变量的值。
它的语法如下:
对象属性或者变量=表达式
这个语句的含义就是将等号右边表达式的值传送给等号左边的变量或者对象属性。例如下面这些语句都是赋值语句:
Form1.Width=300
Temp=Form1.Width
Form1.Caption="你好"
set 变量名=表达式 (set用于对对象型的变量进行赋值)
2、注释语句
在程序中使用注释是一个很好的习惯。程序员可以使用注释来说明自己编写某段代码或声明某个变量的目的,以后只要读到这些注释就会想起当时的思路,既方便了开发者自己,也方便以后要阅读这些代码的其他程序员。
添加注释,只要使用Rem关键字或撇号(')作为文字的开头,注意用Rem时必须使用冒号与前面语句隔开。
下面的语句是赋值语句和注释的示例:
Form1.Width=300 '将窗体的宽度设置为300
Temp=Form1.Width '将窗体的宽度赋值给变量Temp
Form1.Caption="你好" :Rem 修改窗体的标题文字
Temp=Temp+20
'变量Temp赋值为自己的原值加20
注释可以和语句在同一行并写在语句的后面,也可占据一整行。上面的例子对这两种情况都作了示范。
3、续行
有的时候,一条VB语句会很长,这给打印和阅读都带来了不便。在这种情况下,可以使用续行符”_ “(一个空格紧跟一条下划线_将长语句分成多行。
4、将多行语句写在一行上
多条较短的语句要写在一行,语句间用“:”作为分隔符号。例如:
Formq.width=300:Temp=Form1.Width:Form1.Caption="你好!"
|