相關文章?
[Swift快速入門(一)第一個Swift程序](http://blog.csdn.net/itachi85/article/details/50531727)?
[Swift快速入門(二)基本數據類型](http://blog.csdn.net/itachi85/article/details/50596987)
**1.賦值運算符**
賦值運算(a = b),表示用b的值來初始化或更新a的值:
~~~
var b = 10
var a = 5
a = b // a 現在等于 10
~~~
Swift 的賦值語句沒有返回值,所以以下代碼是錯誤的:
~~~
// 此句錯誤, 因為 x = y 并不返回任何值
if x = y {
}
~~~
**2.算術運算符**
Swift 讓所有數值類型都支持了基本的四則運算:?
加法(+)?
減法(-)?
乘法(*)?
除法(/)
~~~
var a=1 + 2 // 等于 3
var b=5 - 3 // 等于 2
var c=2 * 3 // 等于 6
var d=10.0 / 2.5 // 等于 4.0
~~~
**3.溢出運算符**
Swift不允許整型變量或者常量被賦值一個超出其表數范圍的數值,如果試圖這么干,則會出現運行時錯誤:
~~~
var a:Int16=32767
//a+1的值超出了Int16的表數范圍,則下面的代碼會導致錯誤
a=a+1
~~~
如果希望數據溢出時Swift程序只是對一出的數據位進行截斷而不是導致錯誤,則可以使用以&開頭的溢出運算符:
* 溢出加法 &+
* 溢出減法 &-
* 溢出乘法 &*
* 溢出除法 &/
* 溢出求余 &%
####值的上溢
下面例子使用了溢出加法&+來處理無符號整數的上溢出:
~~~
// max等于UInt8的最大整數 255
var max = UInt8.max
// 這時候 max 等于 0
max= max&+ 1
~~~
max用Int8所能承載的最大值255(二進制11111111),然后用&+加1。然后UInt8就無法表達這個新值的二進制了,也就導致了這個新值上溢出了,大家可以看下圖。溢出后,新值在UInt8的承載范圍內的那部分是00000000,也就是0。

####值的下溢
數值也有可能因為太小而越界:
~~~
// min等于UInt8的最小值0
var min= UInt8.min
// 此時 min等于 255
min= min&- 1
~~~
UInt8的最小值是0(二進制為00000000)。使用&-進行溢出減1,就會得到二進制的11111111即十進制的255。

####除零溢出
整數和整數在進行除法或者求余運算時,如果被除數為0,程序將會出錯:
~~~
let x=10
let y = x / 0 //出錯
~~~
改為可溢出運算符:
~~~
let x=10
let y = x &/ 0 //結果為0
~~~
**4.位運算符**
假設變量A=60,變量B=13,那么位運算的結果如下:
~~~
A = 0011 1100
B = 0000 1101
A & B = 0000 1100 //結果為12
A|B = 0011 1101 //結果為61
A^B = 0011 0001 //結果為49
~A = 1100 0011 //結果為-61
~~~

**5.范圍運算符**
Swift包括兩個范圍的運算符,用于表達值的范圍。
####閉范圍運算符
閉范圍運算符a…b定義一個包含從a到b(包括a和b)的所有值的范圍,其中a不能大于b。 閉范圍運算符在迭代一個范圍的所有值時是非常有用的,如在for-in循環中:
~~~
//結果為1到5
for num in 1...5 {
print(num)
}
~~~
####半開范圍運算符
半開范圍運算符`a..<b`用于定義一個從a到b(包括a邊界不包括b邊界),其中a不能大于b。
~~~
//結果為1到4
for num in 1..<5 {
print(num)
}
~~~
**6.比較運算符**
* 等于(a == b)
* 不等于(a!= b)
* 大于(a > b)
* 小于(a < b)
* 大于等于(a >= b)
* 小于等于(a <= b)
每個比較運算都返回了一個標識表達式是否成立的布爾值:
~~~
1 == 1 // true
2 != 1 // true
2 > 1 // true
1 < 2 // true
1 >= 1 // true
2 <= 1 // false
~~~
**7.邏輯運算符**
邏輯運算的操作對象是邏輯布爾值。Swift 支持基于 C 語言的三個標準邏輯運算。
* 邏輯非運算(!a)對一個布爾值取反,使得true變false,false變true。
* 邏輯與(a && b)表達了只有a和b的值都為true時,整個表達式的值才會是true。
* 邏輯或(a || b)它表示了兩個邏輯表達式的其中一個為true,整個表達式就為true。
**8.三目運算符**
三目運算符的格式為:
~~~
expression? if-true-statement: if-false-statement
~~~
如果邏輯表達式expression為真則執行并返回第二個操作數的值; 如果不為真則執行并返回第三個操作數的值。
~~~
var a = 5
var b = 3
var str = a > b ? "a大于b" : "a不大于b"
// 輸出"a大于b"
print(str)
~~~
**9.nil合并運算符**
nil合并運算符:??,它的格式如下:
~~~
a ?? b
~~~
簡單來說就是如果a為nil,則程序會返回b的值
~~~
let dfstr="九陰真經"
var str:String?
// 輸出"九陰真經"
print(str ?? dfstr)
~~~