Swift數值運算
數值運算
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"
兩個Character值或一個String和一個Character值,相加會生成一個新的String值:
let dog: Character = "d"
let cow: Character = "c"
let dogCow = dog + cow
// 譯者注: 原來的引號內是很可愛的小狗和小牛, 但win os下不支持表情字符, 所以改成了普通字符
// dogCow 現在是 "dc"
詳情參見字符,字符串的拼接。
求餘運算
求餘運算(a % b)是計算b的多少倍剛剛好可以容入a,返回多出來的那部分(餘數)。
注意:
求餘運算(%)在其他語言也叫取模運算。然而嚴格說來,我們看該運算符對負數的操作結果,"求餘"比"取模"更合適些。
我們來談談取餘是怎麼回事,計算9 % 4,你先計算出4的多少倍會剛好可以容入9中:
2倍,非常好,那餘數是1(用橙色標出)
在 Swift 中這麼來表達:
9 % 4 // 等於 1
爲了得到a % b的結果,%計算了以下等式,並輸出餘數作爲結果:
a = (b × 倍數) + 餘數
當倍數取最大值的時候,就會剛好可以容入a中。
把9和4代入等式中,我們得1:
9 = (4 × 2) + 1
同樣的方法,我來們計算 -9 % 4:
-9 % 4 // 等於 -1
把-9和4代入等式,-2是取到的最大整數:
-9 = (4 × -2) + -1
餘數是-1。
在對負數b求餘時,b的符號會被忽略。這意味着 a % b 和 a % -b的結果是相同的。
浮點數求餘計算
不同於 C 語言和 Objective-C,Swift 中是可以對浮點數進行求餘的。
8 % 2.5 // 等於 0.5
這個例子中,8除於2.5等於3餘0.5,所以結果是一個Double值0.5。
自增和自增運算
和 C 語言一樣,Swift 也提供了方便對變量本身加1或減1的自增(++)和自減(--)的運算符。其操作對象可以是整形和浮點型。
var i = 0
++i // 現在 i = 1
每調用一次++i,i的值就會加1。實際上,++i是i = i + 1的簡寫,而--i是i = i - 1的簡寫。
++和--既是前置又是後置運算。++i,i++,--i和i--都是有效的寫法。
我們需要注意的是這些運算符修改了i後有一個返回值。如果你只想修改i的值,那你就可以忽略這個返回值。但如果你想使用返回值,你就需要留意前置和後置操作的返回值是不同的。
當
++前置的時候,先自増再返回。當
++後置的時候,先返回再自增。
例如:
var a = 0
let b = ++a // a 和 b 現在都是 1
let c = a++ // a 現在 2, 但 c 是 a 自增前的值 1
上述例子,let b = ++a先把a加1了再返回a的值。所以a和b都是新值1。
而let c = a++,是先返回了a的值,然後a才加1。所以c得到了a的舊值1,而a加1後變成2。
除非你需要使用i++的特性,不然推薦你使用++i和--i,因爲先修改後返回這樣的行爲更符合我們的邏輯。
一元負號
數值的正負號可以使用前綴-(即一元負號)來切換:
let three = 3
let minusThree = -three // minusThree 等於 -3
let plusThree = -minusThree // plusThree 等於 3, 或 "負負3"
一元負號(-)寫在操作數之前,中間沒有空格。
一元正號
一元正號(+)不做任何改變地返回操作數的值。
let minusSix = -6
let alsoMinusSix = +minusSix // alsoMinusSix 等於 -6
雖然一元+做無用功,但當你在使用一元負號來表達負數時,你可以使用一元正號來表達正數,如此你的代碼會具有對稱美。