Swift 中的高級操作符

位操作符

非:~
與:&
或:|
異或:^

左移:<<
右移:>>

對于無符號表示和有符號表示,位移行為不一樣。

溢出運算符

Overflow addition (&+)
Overflow subtraction (&-)
Overflow multiplication (&*)
Overflow division (&/)
Overflow remainder (&%)

上溢

   0 11111111
&+ 0 00000001
=  1 00000000
= 0

下溢

   00000000
&+ 00000001
=  11111111
= 255

for both signed and unsigned integers,
overflow always wraps around from the largest valid integer value back to the smallest,
and underflow always wraps around from the smallest value to the largest.

除0

&/&% 除零都返回零。

運算符函數

struct Vector2D {
    var x = 0.0, y = 0.0
}
func + (left: Vector2D, right: Vector2D) -> Vector2D {
    return Vector2D(x: left.x + right.x, y: left.y + right.y)
}

let vector = Vector2D(x: 3.0, y: 1.0)
let anotherVector = Vector2D(x: 2.0, y: 4.0)
let combinedVector = vector + anotherVector

前綴、后綴

添加 prefixpostfix 修改符。

prefix func - (vector: Vector2D) -> Vector2D {
    return Vector2D(x: -vector.x, y: -vector.y)
}

混合賦值運算符

把左操作數標記為 inout

func += (inout left: Vector2D, right: Vector2D) {
    left = left + right
}
prefix func ++ (inout vector: Vector2D) -> Vector2D {
    vector += Vector2D(x: 1.0, y: 1.0)
    return vector
}

默認的賦值運算符和三元運算符(a ? b : c) 不能重載。

等號運算符

自定義的類和結構沒有默認的等號比較運算。

自定義運算符

[prefix/infix/postfix] operator [opName] {
  associativity [left/right/none] precedence [preValue]
}

先用上述的語法聲明運算符,然后為自己的類實現運算。
associativity 默認為 none
precedence 默認為 0.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,775評論 0 33
  • 高級運算符(Advanced Operators) 本文參考自蘋果官方文檔Advanced Operators本頁...
    果啤閱讀 1,616評論 1 5
  • 2017年11月17日 【哥哥篇】今晚哥同學和同學媽媽一起來家里,臨走前讓哥跟他們一起出去買點夜宵吃。估計是出于不...
    向著陽光00閱讀 172評論 0 1
  • 大爺我最近心情不痛快。 我是 怒從心頭起! 惡向膽邊生! 拔刀四顧一聲吼! 茬架沒有人!
    陳狂閱讀 421評論 13 6
  • 都不想把那些男男女女你內心并行不悖吧寶動寶貝小寶貝不想你寶動寶動本微博并栢寶動白血病細胞白血病細胞細胞白血病寶動吧...
    IBOS楊芳賢閱讀 308評論 0 0