跳轉到內容

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)

華夏公益教科書