標籤:語言 idt alt img auto ack turn 忽略 規則
進階運算子
位元運算符
按位取反: ~按位與運算: &按位或運算: |按位異或運算: ^按位左移運算: <<按位右移動算: >>
溢出運算子自從swift裡面提供了所謂的型別安全之後。我們就不能再用一個 Int.max 進行+1操作了,這樣會導致報錯。所以swift又提供了一個讓我們在知道這會溢出的前提下,繼續+1的溢出運算子,這聽上去也不錯。
溢出加法 &+溢出減法 &-溢出乘法 &*溢出除法 &/溢出取餘 &%
有趣的是,我們知道許多的語言中。假設一個數被0除的話,會產生錯誤。而在swift中,溢出除法 &/ 被0除的話,就不會產生錯誤。而是會得到0值:
var a = Int.max &/ 0 //不會報錯,則是a被賦值為0var b = Int.max / 0 // 報錯。由於/不能溢出操作
優先順序雖然文檔上還是描寫敘述了優先順序,但我認為一個正常人類是不會使用這麼不經常使用的規則去寫一個讓還有一個正常人類不那麼easy看懂的運算式的,所以能夠忽略掉這裡的優先順序介紹,直接使用()來表明優先順序。
運算子多載swift裡依舊提供了運算子多載。。
。。。不提供才可笑。。
可是,中置,前置,後置運算子的定義居然不一樣。。
。
。
中置: @infix
中置運算子還包含 == , != 等等
前置: @prefix@prefix func +(num:Int) -> Int{
return num + 5
}
var a = 3
println(+a) //結果是8
後置: @postfix與前置幾乎相同,就不寫了。
組合賦值運算子: @assignment
自己定義運算子
operator prefix +++ { } //定義了一個前置運算子 +++, 注意定義運算子的keyword operator
@prefix @assignment func +++ (inout num:Int) {
num += 10
}
var a = 1
+++a
println(a) //得到結果是11
自己定義中置運算子的結合性和優先順序
operator表示定義一個新的運算子,infix表示是中置運算子,運算子寫作 +-, associativity 表示結合性,與後面的left一起表示為左結合。 precedence表示優先順序。與後面的數字一起表示優先順序為140 (預設值為100)
寫在最後:別把運算子玩壞了!!
!!
swift 筆記 (二十一) —— 進階運算子