3.4. 算术运算符

Swift 中所有数值类型都支持了基本的四则算术运算符

  • 加法(+
  • 减法(-
  • 乘法(*
  • 除法(/
1 + 2       // 等于 3
5 - 3       // 等于 2
2 * 3       // 等于 6
10.0 / 2.5  // 等于 4.0

与 C 语言和 Objective-C 不同的是,Swift 默认情况下不允许在数值运算中出现溢出情况。但是你可以使用 Swift 的溢出运算符来实现溢出运算(如 a &+ b)。详情参见 溢出运算符

加法运算符也可用于 String 的拼接:

"hello, " + "world"  // 等于 "hello, world"

求余运算符

求余运算符a % b)是计算 b 的多少倍刚刚好可以容入 a,返回多出来的那部分(余数)。

注意:求余运算符(%)在其他语言也叫取模运算符。但是严格说来,我们看该运算符对负数的操作结果,「求余」比「取模」更合适些。

我们来谈谈取余是怎么回事,计算 9 % 4,你先计算出 4 的多少倍会刚好可以容入 9 中:

你可以在 9 中放入两个 4,那余数是 1(用橙色标出)。在 Swift 中可以表达为:9 % 4 // 等于 1。为了得到 a % b 的结果,% 计算了以下等式,并输出 余数作为结果:a = (b × 倍数) + 余数。当 倍数取最大值的时候,就会刚好可以容入 a 中。

94 代入等式中,我们得 19 = (4 × 2) + 1。同样的方法,我们来计算 -9 % 4-9 % 4 // 等于 -1。把 -94 代入等式,-2 是取到的最大整数:-9 = (4 × -2) + -1,余数是 -1

在对负数 b 求余时,b 的符号会被忽略。这意味着 a % ba % -b 的结果是相同的。

一元负号运算符

数值的正负号可以使用前缀 -(即一元负号符)来切换:

let three = 3
let minusThree = -three       // minusThree 等于 -3
let plusThree = -minusThree   // plusThree 等于 3, 或 "负负3"

一元负号符(-)写在操作数之前,中间没有空格。

一元正号运算符

一元正号符+)不做任何改变地返回操作数的值:

let minusSix = -6
let alsoMinusSix = +minusSix  // alsoMinusSix 等于 -6

虽然一元正号符什么都不会改变,但当你在使用一元负号来表达负数时,你可以使用一元正号来表达正数,如此你的代码会具有对称美。