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))