3.1.4 數值類型的算術運算
對各種數值類型的數據可以進行各種算術運算,這主要依賴于算術操作符。倉頡算術操作符包括1個一元前綴操作符“-(負號)”和6個二元操作符,如表3-4所示。
表3-4 算術操作符

由數值類型操作數和算術操作符構成的表達式,也被稱為算術表達式。
1.運算規則
倉頡的部分算術操作符與數學運算的規則是完全一致的,如“?(負號)”表示負數,“*”用于求積,“+”用于求和,“?(減法)”用于求差。另外,倉頡中也有一些需要注意的地方。
首先是冪運算。由于代碼編輯窗口存在輸入限制,不能使用上標的方式來表示冪運算,因此倉頡使用操作符“**”來表示乘方運算。舉例如下:
3 ** 2 // 相當于32,計算結果為9 16.0 ** 0.5 // 相當于16.00.5,計算結果為4.0
然后是與除運算有關的兩個操作符:除法(/)和取模(%)。
“/”用于求商。如果“/”的兩個操作數均是浮點類型,那么運算結果也是浮點類型;如果兩個操作數均是整數類型,那么運算結果也是整數類型(只保留商的整數部分)。舉例如下:
16.0 / 8.0 // 結果為2.0 16.0 / 10.0 // 結果為1.6 16 / 8 // 結果為2 16 / 10 // 結果為1
“%”用于求余數,該操作符只適用于整數類型的操作數。余數是指除法中未被除盡的部分,余數的取值范圍為0到除數之間(不包括除數本身)的數。舉例如下:
16 % 8 // 結果為0 16 % 10 // 結果為6 8 % 16 // 結果為8
2.操作符的優先級和結合性
如果算術表達式中出現了1個以上的算術操作符,那么在運算時需要按照操作符的優先級和結合性來進行:優先級高的操作符先運算,優先級低的操作符后運算,相同優先級的操作符按照結合性進行運算。
倉頡的算術操作符優先級從高到低依次為:負號 > 乘方 > 乘除(乘法、除法、取模) > 加減(加法、減法)。舉例如下:
-6 ** 2
對于以上算術表達式,由于“?(負號)”的優先級高于“**”,因此先進行負號運算,再進行乘方運算,結果為36。
2 * 7 - 9 / 3
對于以上算術表達式,由于“*”和“/”的優先級相同,并且高于“?(減法)”,因此先進行乘法運算,再進行除法運算,最后進行減法運算,結果為11。
操作符的結合性指的是操作符和操作數結合的方式,分為左結合(從左到右結合)和右結合(從右到左結合)。本節介紹的各種算術操作符中,負號(?)和乘方(**)是右結合的,其他算術操作符都是左結合的。
對于以下算術表達式:
8 % 6 * 3
由于“%”和“*”的優先級相同,因此按照結合性(兩者都是左結合,即從左至右的順序)進行運算,先進行取模運算,再進行乘法運算,結果為6。
以上是一個左結合的例子,再看一個右結合的例子。對于以下算術表達式:
2.0 ** 9.0 ** 0.5
其中包含了2個右結合的操作符。在運算時,先計算9.0 ** 0.5,得到結果3.0,再計算2.0 ** 3.0,最終結果為8.0。
3.使用圓括號提升運算的優先級
如果有需要,可以使用圓括號“()”來提升運算的優先級。當一個表達式中出現了多對圓括號時,按照先內層后外層、層次相同時從左至右的順序進行運算。舉例如下:
42 / ((5 - 2) * 7)
在以上算術表達式中,有內外兩層圓括號。在運算時,先進行減法運算,再進行乘法運算,最后進行除法運算,結果為2。
(9 + 13) % (7 - 4)
在以上算術表達式中,有兩對層次相同的圓括號。在運算時,先進行左邊的加法運算,再進行右邊的減法運算,最后進行取模運算,結果為1。
除了可以用于提升優先級,也可以在復雜的表達式中加上一些圓括號來提高程序的可讀性。例如,可以在以上示例的算術表達式中加上一些圓括號:
(-6) ** 2 (2 * 7) - (9 / 3)
練習
計算以下算術表達式的值,并編寫程序驗證:
2 ** 3 1.21 ** 0.5 3 / 2 5 / 2 3.0 / 2.0 5.0 / 2.0 3 % 2 13 % 5 3 * -7 120 / 5 % 3 * 7 120 / 5 % (3 * 7) 120 / (5 % 3) * 7 120 / (5 % (3 * 7))