Swift优先级和结合性
优先级和结合性
运算符的优先级使得一些运算符优先于其他运算符,高优先级的运算符会先被计算。
结合性定义相同优先级的运算符在一起时是怎么组合或关联的,是和左边的一组呢,还是和右边的一组。意思就是,到底是和左边的表达式结合呢,还是和右边的表达式结合?
在混合表达式中,运算符的优先级和结合性是非常重要的。举个例子,为什么下列表达式的结果为4
?
2 + 3 * 4 % 5
// 结果是 4
如果严格地从左计算到右,计算过程会是这样:
- 2 + 3 = 5
- 5 * 4 = 20
- 20 / 5 = 4 余 0
但是正确答案是4
而不是0
。优先级高的运算符要先计算,在Swift和C语言中,都是先乘除后加减的。所以,执行完乘法和求余运算才能执行加减运算。
乘法和求余拥有相同的优先级,在运算过程中,我们还需要结合性,乘法和求余运算都是左结合的。这相当于在表达式中有隐藏的括号让运算从左开始。
2 + ((3 * 4) % 5)
3 * 4 = 12,所以这相当于:
2 + (12 % 5)
12 % 5 = 2,所这又相当于
2 + 2
计算结果为 4。
查阅Swift运算符的优先级和结合性的完整列表,请看表达式。
注意:
Swift的运算符较C语言和Objective-C来得更简单和保守,这意味着跟基于C的语言可能不一样。所以,在移植已有代码到Swift时,注意去确保代码按你想的那样去执行。