Futurebasic/语言/数值表达式
修订:2000 年 5 月 30 日(版本 3)
数值表达式是任何可以作为数字求值的东西。数字可以通过以下方式表达
- 数值字面量、符号常量或数值变量。有关更多信息,请参见附录 C:数据类型和数据表示。
示例17.3 _true x& Z%(14)
- 对任何返回数值的自定义函数或工具箱函数的引用。
示例FN theSum# FN GETCATINFO(@pb)
- 任何内置 FB 函数返回的值,其名称不以“
$
”结尾。(注意:这两个例外是USING
函数和STR#
函数,这两个函数都返回字符串值。)
示例LEN("Hello") DIALOG(0)
数据比较表达式始终返回 -1 或 0。在许多情况下,这些值分别被解释为“真”或“假”。数据比较表达式具有以下形式
相等比较包含两个“兼容类型”的表达式,用“=
”运算符或“<>
”运算符隔开(您也可以使用“==
”作为“=
”的同义词,以及“!=
”作为“<>
”的同义词)。这两个操作数必须属于以下类别之一
- 一对数值表达式;
- 一对字符串表达式(参见附录 E:字符串表达式);
- 任何一对相同类型的变量。
使用“=
”(或“==
”)的相等比较在两个操作数的值相等时求值为 -1;否则求值为 0。使用“<>
”(或“!=
”)的相等比较在两个操作数不相等时求值为 -1;否则求值为 0。
示例
x& == LEN(acc$) * 3
"Bronson" <> theName$(7,4)
record1 = record2
顺序比较可以测试两个数值操作数或两个字符串操作数的相对“顺序”;也就是说,它测试一个操作数是否大于或小于另一个。在字符串的情况下,string1$
被认为“小于”string2$
,如果它在字母顺序上早于string2$
。更准确地说,字符串比较取决于字符串中字符的 ASCII 值。顺序比较采用以下形式 expr1 operator expr2
,其中 expr1
和 expr2
都是数值表达式或字符串表达式,而 operator
是此表中的一个运算符
<img src="appendix/Appendix_D-_Numeric_Expr02.gif" alt="IMAGE imgs/Appendix_D-_Numeric_Expr02.gif" width=397 height=177>
示例
blt& > ham% + rye%
"hello" << MID$(testString$,x,5)
一元运算符是只接受一个操作数的运算符。FB 有三个一元运算符:“+
”;“-
”;“NOT
”。一元运算符始终出现在操作数的左侧;操作数可以是任何数值表达式。
<img src="appendix/Appendix_D-_Numeric_Expr03.gif" alt="IMAGE imgs/Appendix_D-_Numeric_Expr03.gif" width=467 height=121>
示例
+n!
-(x# + 12 / 7.3)
NOT found%
复合数值表达式是任何用一个或多个下表中运算符分隔的数值表达式的列表。复合表达式具有以下形式
expr1 operator expr2 [operator expr3 ...]
此外,任何用一对圆括号括起来的表达式也是表达式。当您用圆括号括起表达式时,圆括号内的整个表达式将在应用左侧或右侧的任何运算符之前被求值。当您希望更改运算符应用的默认顺序时,这很有用。例如
3 * (7 + 1)
在上面的表达式中,“+
”运算符在“*
”运算符之前被应用。3 乘以 7 和 1 的总和,得到结果 24。但如果表达式写成这样
3 * 7 + 1
那么“*
”运算符将先被应用。在这种情况下,1 被添加到 3 和 7 的乘积中,得到结果 22。
<img src="appendix/Appendix_D-_Numeric_Expr05.gif" alt="IMAGE imgs/Appendix_D-_Numeric_Expr05.gif" width=466 height=530>
示例
7 + 3 + 6 * 18.7
x& AND (NOT BIT(7))
ZZ MOD (x% + 8)
当表达式包含多个运算符时,操作执行的顺序会影响结果。当运算符出现在圆括号的左侧或右侧时,圆括号内的所有操作都将首先执行。当几个运算符都出现在同一匹配的圆括号对中(或在所有圆括号之外)时,操作执行的顺序由它们的优先级顺序决定,“优先级更高”的操作在“优先级更低”的操作之前执行。例如,考虑以下表达式
4 + 7 * 5
“*
”运算符的优先级高于“+
”运算符(参见下表)。因此,当此表达式被求值时,首先将 7 乘以 5 得到 35;然后将该结果加到 4 上,得到最终答案 39。
下表按优先级顺序列出了运算符,从最高到最低。当表达式在同一优先级级别(以及在相同圆括号深度内)包含多个运算符时,它们的运算总是从左到右执行。
<img src="appendix/Appendix_D-_Numeric_Expr07.gif" alt="IMAGE imgs/Appendix_D-_Numeric_Expr07.gif" width=351 height=198>
示例:考虑以下表达式
20 - 4 + 3 * (24 / (7 + 1) + 2)
以下是 FB 为将此表达式简化为其最终值 31 所执行的一系列操作。
操作 |
生成的表达式 |
20-4 = 16 |
16 + 3 * (24 / (7 + 1) + 2) |
(7+1) = 8 |
16 + 3 * (24 / 8 + 2) |
24/8 = 3 |
16 + 3 * (3 + 2) |
(3+2) = 5 |
16 + 3 * 5 |
3*5 = 15 |
16 + 15 |
16 + 15 = 31 | 31 |
许多 FB 语句需要以静态整数表达式的形式表达数量。静态整数表达式可以是简单表达式或复杂表达式,但其操作数限于以下
- 整数字面量;
- 符号常量;
SIZEOF
、OFFSETOF
和TYPEOF
函数。
以下是有效静态整数表达式的示例
762
3 * _myConstant + SIZEOF(x&)
44 / 11
以下是无效静态整数表达式的示例
126 + x&
3.14159
SQR(49)
85 + FN Zilch(36)