跳转到内容

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。在许多情况下,这些值被解释为分别表示“真”或“假”。数据比较表达式具有以下形式

相等比较

[编辑 | 编辑源代码]

相等比较由用“=”运算符或“<>”运算符分隔的两个“兼容类型”表达式组成(您还可以使用“==”作为“=”的同义词,以及“!=”作为“<>”的同义词)。两个操作数必须属于以下类别之一

如果两个操作数的值相等,则使用“=”(或“==”)的相等比较被评估为-1;否则被评估为0。如果两个操作数不相等,则使用“<>”(或“!=”)的相等比较被评估为-1;否则被评估为0。
示例

x& == LEN(acc$) * 3
"Bronson" <> theName$(7,4)
record1 = record2

顺序比较

[编辑 | 编辑源代码]

顺序比较可以测试两个数值操作数或两个字符串操作数的相对“顺序”;也就是说,它测试一个操作数是否大于或小于另一个操作数。对于字符串,如果 string1$ 在字母顺序上早于 string2$,则它被认为“小于” string2$。更准确地说,字符串比较取决于字符串中字符的 ASCII 值。顺序比较采用 expr1 operator expr2 的形式,其中 expr1expr2 都是数值表达式或字符串表达式,而 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 语句需要以静态整型表达式表示的数量。静态整型表达式可以是简单表达式或复杂表达式,但其操作数限制为以下内容

  • 整型字面量;
  • 符号常量;
  • SIZEOFOFFSETOFTYPEOF 函数。

以下是有效静态整型表达式的示例

762
3 * _myConstant + SIZEOF(x&)
44 / 11

以下不是有效的静态整型表达式

126 + x&
3.14159
SQR(49)
85 + FN Zilch(36)

华夏公益教科书