打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
FreeBASIC学习笔记——第03章 运算符与表达式
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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JAVA里面运算符的如何使用和优先级怎么样?
逻辑代数
44. 第3章:数字电子技术第1节:数字电路基础知识(三)
Java(运算符和表达式)
C语言一夜速成~!!
什么是Python表达式?Python基础入门
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服