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 | ^= | 求一個變量指數(shù)并賦值給該變量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)區(qū)分開來,。 | Let() | 將用戶定義類型的字段賦值給變量列表 |
3.2 算術(shù)運算
算術(shù)運算就是加,、減、乘,、除等運算,,這里需要注意除法有“/”(除)和“\”(整除)的區(qū)別,具體運算符和說明如表3-2所示,。
表3-2 算術(shù)運算符及說明
運算符 | 名稱 | 說明 | + | 加 | 兩個表達式相加 | - | 減 | 兩個表達式相減 | * | 乘 | 兩個表達式相乘 | / | 除 | 兩個表達式相除(除法,,可以有小數(shù)) | \ | 整除 | 兩個表達式整除(除法,沒有小數(shù)) | ^ | 求冪 | 求表達式的指數(shù) | Mod | 求余 | 兩個表達式求余 | - | 取負(fù) | 更改表達式符號(如5加上“-”后變成-5) |
3.3 條件運算
條件運算符是對表達式進行比較的運算,,結(jié)果為真(True)或假(False),,條件運算符及其說明如表3-3所示。
表3-3 條件運算符及說明
運算符 | 名稱 | 說明 | = | 等于 | 比較兩個表達式是否相等 | <> | 不等于 | 比較兩個表達式是否不相等 | < | 小于 | 比較表達式是否比另一個表達式小 | <= | 小于等于 | 比較表達式是否比另一個表達式小或相等 | > | 大于 | 比較表達式是否比另一個表達式大 | >= | 大于等于 | 比較表達式是否比另一個表達式大或相等 | Is | | 檢查對象是否與從其編譯時類型派生的類型兼容 |
3.4 邏輯運算
邏輯運算有與,、或,、非、異或等運算,,具體運算符及說明如表3-4所示,。
表3-4 邏輯運算符及說明
運算符 | 名稱 | 說明 | And | 與 | 返回兩個數(shù)值按位與的結(jié)果,真值表如下:(有0出0,,全1出1)
表達式1 | 表達式2 | 結(jié)果 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
| Or | 或 | 返回兩個數(shù)值按位或的結(jié)果,,真值表如下:(有1出1,全0出0)
表達式1 | 表達式2 | 結(jié)果 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
| Not | 非 | 返回表達式按位非的結(jié)果,,真值表如下:
| Xor | 異或 | 返回兩個數(shù)值異或的結(jié)果,,真值表如下:(同出0,異出1)
表達式1 | 表達式2 | 結(jié)果 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
| Eqv | 等價 | 返回兩個數(shù)值同或的結(jié)果,,真值表如下:(同出1,,異出0)
表達式1 | 表達式2 | 結(jié)果 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
| Imp | 蘊涵 | 返回兩個數(shù)值蘊涵運算的結(jié)果,真值表如下:
表達式1 | 表達式2 | 結(jié)果 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 |
| AndAlso | 且 | 返回兩個數(shù)值邏輯與的結(jié)果,,真值表如下:
表達式1 | 表達式2 | 結(jié)果 | 0 | 任意 | 0 | 非零 | 0 | 0 | 非零 | 非零 | -1 |
| OrElse | 或 | 返回兩個數(shù)值邏輯或的結(jié)果,,真值表如下:
表達式1 | 表達式2 | 結(jié)果 | 0 | 0 | 0 | 0 | 非零 | -1 | 非零 | 任意 | -1 |
|
3.5 位運算
3.5.1 位運算說明
FreeBASIC中的與、或,、非等也可以用于位運算操作,,同時增加了位移操作,,大大增強了位運算的功能。(雖然Xor,Eqv等也屬于位操作,,由于使用較少,,此處不具體介紹),有關(guān)位操作的運算符和說明如表3-5所示,。
表3-5 位運算符及說明
運算符 | 名稱 | 說明 | And | 與 | 返回兩個數(shù)值按位與的結(jié)果,,真值表如下:(有0出0,全1出1)
表達式1 | 表達式2 | 結(jié)果 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
| Or | 或 | 返回兩個數(shù)值按位或的結(jié)果,,真值表如下:(有1出1,,全0出0)
表達式1 | 表達式2 | 結(jié)果 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
| Not | 非 | 返回表達式按位非的結(jié)果,真值表如下:
| Shl | 左移 | 將數(shù)字表達式的位向左移動 | Shr | 右移 | 將數(shù)字表達式的位向右移動 |
3.5.2 與邏輯運算比較
1,、與操作 根據(jù)定義的數(shù)據(jù)類型不同,,編譯器會判斷與操作的類型,如果對按位與的結(jié)果進行邏輯判斷時按照非0即真的方式,。
2,、或操作 根據(jù)定義的數(shù)據(jù)類型不同,編譯器會判斷或操作的類型,,如果對按位或的結(jié)果進行邏輯判斷時按照非0即真的方式,。
3、非操作 按位非操作時需要注意,,由于編譯器在非操作時自動將數(shù)據(jù)轉(zhuǎn)換為Integer類型,,因而轉(zhuǎn)換后輸出結(jié)果時UByte和UShort類型會變成負(fù)數(shù),需要強制轉(zhuǎn)換才能獲得正確的結(jié)果,。由于Not是按位非(即同C語言的~,,而不是!),,所以用于邏輯判斷時,,在不確定結(jié)果時,最好轉(zhuǎn)換成布爾類型的結(jié)果后再進行非操作,,否則非零數(shù)按位非后未必為0,,如下所示,非操作的一些特殊性,。
4,、位移操作
位移操作有Shl(左移)和Shr(右移),即變量的值向左或向右移動指定位數(shù),。
語法:Shl和Shr前為位移的變量,,后面為位移幾位。
例如:
3.6 優(yōu)先級
FreeBASIC的優(yōu)先級如表3-6所示,,從上到下優(yōu)先級依次由高到低,,同一區(qū)塊的優(yōu)先級相同,。在程序設(shè)計時需要注意表達式的優(yōu)先級,否則會出現(xiàn)不是自己需要的結(jié)果,。對于運算符優(yōu)先級不明確的表達式,,建議將表達式的部分包含在括號中,以便盡可能減少錯誤,,并有利于讀者閱讀代碼,。
表3-6 FreeBASIC優(yōu)先級
操作者 | 描述 | 關(guān)聯(lián)性 | Cast | 類型轉(zhuǎn)換 | N/A | ProcPtr | 程序指針 | N/A | StrPtr | 字符串指針 | N/A | VarPtr | 變量指針 | N/A | | [] | 字符串索引 | Left-to-Right | [] | 指針?biāo)饕?/p> | Left-to-Right | () | 數(shù)組索引 | Left-to-Right | () | 函數(shù)調(diào)用 | Left-to-Right | . | 成員訪問 | Left-to-Right | -> | 指向成員訪問 | Left-to-Right | @ | 取地址 | Right-to-Left | * | 取數(shù)據(jù)值 | Right-to-Left | New | 賦值內(nèi)存 | Right-to-Left | Delete | 取消賦值內(nèi)存 | 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 | ^= | 指數(shù)和賦值 | 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 |
|