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)