FreeBASIC学习笔记——第03章 运算符与表达式

来源:互联网 发布:淘宝店铺购物车营销 编辑:程序博客网 时间:2024/06/06 00:06

3.1 赋值运算

        FreeBASIC的赋值运算除了“=”以外,还有类似C语言的运算后赋值的操作,具体运算符及其说明如表3-1所示。

表3-1 赋值运算符及说明

运算符

说明

=

为变量赋值一个值

&=

追加并赋值一个字符串到另一个字符串,s1 &= s2等同于s1 = s1 & s2

+=

添加并赋值给一个变量s1 += s2等同于s1 = s1 + s2

-=

减去并赋值给一个变量s1 -= s2等同于s1 = s1 - s2

*=

乘上一个变量并赋值给该变量s1 *= s2等同于s1 = s1 * s2

/=

除以一个变量并赋值给该变量 s1 /= s2等同于s1 = s1 / s2

\=

将一个变量整除并赋值给该变量 s1 \= s2等同于s1 = s1 \ s2

^=

求一个变量指数并赋值给该变量s1 ^= s2等同于s1 = s1 ^ s2

Mod=

将一个变量求余并赋值给该变量s1 Mod= s2等同于s1 = s1 Mod s2

And=

与上一个变量并赋值给该变量s1 And= s2等同于s1 = s1 And s2

Or=

或上一个变量并赋值给该变量s1 Or= s2等同于s1 = s1 Or s2

Xor=

异或上一个变量并赋值给该变量s1 Xor= s2等同于s1 = s1 Xor s2

Eqv=

同或上一个变量并赋值给该变量s1 Eqv= s2等同于s1 = s1 Eqv s2

Imp=

蕴涵上一个变量并赋值给该变量s1 Imp= s2等同于s1 = s1 Imp s2

Shl=

左移一个变量并赋值给该变量s1 Shl= s2等同于s1 = s1 Shl s2

Shr=

右移一个变量并赋值给该变量s1 Shr= s2等同于s1 = s1 Shr s2

Let

Let用于重载操作符 =(赋值)运算符,并将其与比较运算符操作符 = (Equal)区分开来。

Let()

将用户定义类型的字段赋值给变量列表

3.2 算术运算

        算术运算就是加、减、乘、除等运算,这里需要注意除法有“/”(除)和“\”(整除)的区别,具体运算符和说明如表3-2所示。

表3-2 算术运算符及说明

运算符

名称

说明

+

两个表达式相加

-

两个表达式相减

*

两个表达式相乘

/

两个表达式相除(除法,可以有小数)

\

整除

两个表达式整除(除法,没有小数)

^

求幂

求表达式的指数

Mod

求余

两个表达式求余

-

取负

更改表达式符号(如5加上“-”后变成-5)

3.3 条件运算

        条件运算符是对表达式进行比较的运算,结果为真(True)或假(False),条件运算符及其说明如表3-3所示。

表3-3 条件运算符及说明

运算符

名称

说明

=

等于

比较两个表达式是否相等

<> 

不等于

比较两个表达式是否不相等

小于

比较表达式是否比另一个表达式小

<=

小于等于

比较表达式是否比另一个表达式小或相等

大于

比较表达式是否比另一个表达式大

>=

大于等于

比较表达式是否比另一个表达式大或相等

Is

 

检查对象是否与从其编译时类型派生的类型兼容

3.4 逻辑运算

    逻辑运算有与、或、非、异或等运算,具体运算符及说明如表3-4所示。

表3-4 逻辑运算符及说明

运算符

名称

说明

And

返回两个数值按位与的结果,真值表如下:(有0出0,全1出1)

表达式1

表达式2

结果

0

0

0

0

1

0

1

0

0

1

1

1

Or

返回两个数值按位或的结果,真值表如下:(有1出1,全0出0)

表达式1

表达式2

结果

0

0

0

0

1

1

1

0

1

1

1

1

Not

返回表达式按位非的结果,真值表如下:

表达式1

结果

0

1

1

0

Xor

异或

返回两个数值异或的结果,真值表如下:(同出0,异出1)

表达式1

表达式2

结果

0

0

0

0

1

1

1

0

1

1

1

0

Eqv

等价

返回两个数值同或的结果,真值表如下:(同出1,异出0)

表达式1

表达式2

结果

0

0

1

0

1

0

1

0

0

1

1

1

Imp

蕴涵

返回两个数值蕴涵运算的结果,真值表如下:

表达式1

表达式2

结果

0

0

1

0

1

1

1

0

0

1

1

1

AndAlso

返回两个数值逻辑与的结果,真值表如下:

表达式1

表达式2

结果

0

任意

0

非零

0

0

非零

非零

-1

OrElse

返回两个数值逻辑或的结果,真值表如下:

表达式1

表达式2

结果

0

0

0

0

非零

-1

非零

任意

-1

3.5 位运算

3.5.1 位运算说明

        FreeBASIC中的与、或、非等也可以用于位运算操作,同时增加了位移操作,大大增强了位运算的功能。(虽然Xor,Eqv等也属于位操作,由于使用较少,此处不具体介绍),有关位操作的运算符和说明如表3-5所示。

表3-5 位运算符及说明

运算符

名称

说明

And

返回两个数值按位与的结果,真值表如下:(有0出0,全1出1)

表达式1

表达式2

结果

0

0

0

0

1

0

1

0

0

1

1

1

Or

返回两个数值按位或的结果,真值表如下:(有1出1,全0出0)

表达式1

表达式2

结果

0

0

0

0

1

1

1

0

1

1

1

1

Not

返回表达式按位非的结果,真值表如下:

表达式1

结果

0

1

1

0

Shl

左移

将数字表达式的位向左移动

Shr

右移

将数字表达式的位向右移动

3.5.2 与逻辑运算比较

1、与操作

        根据定义的数据类型不同,编译器会判断与操作的类型,如果对按位与的结果进行逻辑判断时按照非0即真的方式。


2、或操作

        根据定义的数据类型不同,编译器会判断或操作的类型,如果对按位或的结果进行逻辑判断时按照非0即真的方式。


3、非操作

        按位非操作时需要注意,由于编译器在非操作时自动将数据转换为Integer类型,因而转换后输出结果时UByte和UShort类型会变成负数,需要强制转换才能获得正确的结果。由于Not是按位非(即同C语言的~,而不是!),所以用于逻辑判断时,在不确定结果时,最好转换成布尔类型的结果后再进行非操作,否则非零数按位非后未必为0,如下所示,非操作的一些特殊性。


4、位移操作

    位移操作有Shl(左移)和Shr(右移),即变量的值向左或向右移动指定位数。

语法:Shl和Shr前为位移的变量,后面为位移几位。


例如:


3.6 优先级

        FreeBASIC的优先级如表3-6所示,从上到下优先级依次由高到低,同一区块的优先级相同。在程序设计时需要注意表达式的优先级,否则会出现不是自己需要的结果。对于运算符优先级不明确的表达式,建议将表达式的部分包含在括号中,以便尽可能减少错误,并有利于读者阅读代码。

表3-6 FreeBASIC优先级

操作者

描述

关联性

Cast

类型转换

N/A

ProcPtr

程序指针

N/A

StrPtr

字符串指针

N/A

VarPtr

变量指针

N/A

 

[]

字符串索引

Left-to-Right

[]

指针索引

Left-to-Right

()

数组索引

Left-to-Right

()

函数调用

Left-to-Right

.

成员访问

Left-to-Right

->

指向成员访问

Left-to-Right

@

取地址

Right-to-Left

*

取数据值

Right-to-Left

New

赋值内存

Right-to-Left

Delete

取消赋值内存

Right-to-Left

 

^

求幂

Left-to-Right

 

-

求反

Right-to-Left

 

*

Left-to-Right

/

Left-to-Right

 

\

整除

Left-to-Right

 

MOD

求余

Left-to-Right

 

SHL

左移

Left-to-Right

SHR

右移

Left-to-Right

 

+

Left-to-Right

-

Left-to-Right

 

&

字符串连接

Left-to-Right

 

Is

运行时类型信息检查

N/A

 

=

等于

Left-to-Right

<> 

不等于

Left-to-Right

小于

Left-to-Right

<=

小于或等于

Left-to-Right

大于

Left-to-Right

>=

大于或等于

Left-to-Right

 

NOT

求位反码

Right-to-Left

 

AND

位逻辑与

Left-to-Right

 

OR

位逻辑或

Left-to-Right

 

EQV

等价

Left-to-Right

IMP

蕴涵

Left-to-Right

XOR

位异或

Left-to-Right

 

ANDALSO

逻辑与

Left-to-Right

ORELSE

逻辑或

Left-to-Right

 

=

赋值

N/A

&=

连接和赋值

N/A

+=

加法和赋值

N/A

-=

减法和赋值

N/A

*=

乘法和赋值

N/A

/=

除法和赋值

N/A

\=

整除和赋值

N/A

^=

指数和赋值

N/A

MOD=

求余和赋值

N/A

AND=

与和赋值

N/A

EQV=

等价和赋值

N/A

IMP=

蕴涵和赋值

N/A

OR=

或和赋值

N/A

XOR=

异或和赋值

N/A

SHL=

左移并赋值

N/A

SHR=

右移并赋值

N/A

LET

赋值

N/A

 

LET()

赋值

N/A