仓颉编程快速上手
上QQ阅读APP看书,第一时间看更新

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