之前在學習ios開發(fā)的過程中,雖然對高級運算符也有了解,但是了解的都不夠深入,今天在網(wǎng)上看到一篇文章對swift高級運算符的介紹,感覺很有用,分享出來,大家一起學習~~~
1、Swift中的位運算
在很多編程語言中都有位運算,位運算應用得當可以提高算法的效率,在此就不做過多的討論了。下面我們一起來看看Swift中的按位與,按位或,按位異或以及按位取反等操作。
(1)按位與(&)
對二進制中的每一位進行與操作,所以叫按位與。運算規(guī)則為1 & 1 = 1,1 & 0 = 0,0 & 1 = 0,0 & 0 = 0。按位與簡單的用法就是保留二進制中的指定位數(shù),或者對數(shù)值進行清零操作。下方是按位與操作的小實例:0000_1111與1000_1011進行按位與運算,就是保留1000_1011的后四位。如果要對指定的二進制數(shù)進行清零的話,只需要把該值和0000_0000進行按位與操作即可。

下方是上述代碼中按位與的原理圖:

(2)按位或(|)
按位或是對二進制中的每一位進行或操作,所以叫按位或。運算規(guī)則為1 | 1 = 1,1 | 0 = 1,0 | 1 = 1,0 | 0 = 0。按位或常用來把指定位置的數(shù)值置為1。下方實例是要把0000_0011的前四位置為1,后四位不變,所以要與1111_0000進行按位或操作。

按位或操作的原理圖如下:

(3)按位異或(^)
異或的運算法則也是比較容易理解的,簡單一句話就是相同為0,不同為1。1 ^ 1 = 0,1 ^ 0 = 1,0 ^ 1 = 1,0 ^ 0 = 0。有異或的運算規(guī)則我們?nèi)菀椎贸?異或任何一個數(shù),還等于這個數(shù)的本身。1異或任何一個數(shù)等于這個數(shù)取反。下方是一個實例:

上面代碼的原理圖如下:

異或的用法是比較多的,我們可以使用異或運算在不創(chuàng)建臨時變量時來交換兩個數(shù)的值。具體如下:

我們還可以使用異或運算來判斷兩個值是否相等,如果兩個數(shù)異或后的值為0,那么兩個數(shù)就相等,具體代碼如下所示:
if swap1 ^ swap2== 0 {
print("swap1 == swap2")
}
(4)按位取反(~)
一個數(shù)值與1進行異或,都會得到其相反的值,也就是取反。我們還可以通過按位取反運算符來對值進行取反,取反的規(guī)則就比較簡單了,就是0變成1,1變成0。下方是取反運算的實例,在Playground中可以看出其取反后的值。按位取反的實例如下(下面只討論的正數(shù)的取反,關(guān)于負數(shù)的取反沒有):

(5)按位左移(<<)和按位右移(>>)操作
正數(shù)的左右位移用0來填補空位,而負數(shù)左移用0來填補,右移用符號位來填補。實例如下:

2.溢出運算符
在Swift語言中,如果值溢出,是會報錯的。這也能反映出Swift安全性,如果你想在值溢出時對有效位進行截斷的話,那么你就可以使用溢出運算符。
值上溢出運算符(&+),關(guān)于值上溢運算符,就不說多少廢話了,直接上實例。在Playground中取出UInt8類型的上限,然后對其加1,讓其溢出。如果你直接使用+號的話,會給出一個錯誤。使用&+就不一樣了,效果如下。值的下溢運算符(&-, &*)的用法和&+類似,在此就不做贅述了。(&/與&%)在Xcode7中未編譯通過,提示找不到此標示符。

3.運算符重載
在Swift2.0中運算符重載是比較容易實現(xiàn)的,就是把函數(shù)名換成你要重載的運算符即可。下方就通過一個小實例來看一下Swift中的運算符重載。在Swift中是+號運算符是不支持元組直接相加的,如果你直接對元組進行加法操作,會報下面的錯誤。

(1)對中綴運算符重載,如果對+運算符進行重載,那么+運算符將會支持元組相加,具體代碼和運行結(jié)果如下所示,+運算符原來的功能還是不變的。

(2)對前綴運算符進行重載,就以-運算符為例。對前綴運算符重載在func前面要加上prefix修飾符。如果要對后綴運算符進行重載的話,要使用postfix進行修飾,下方是對-進行前綴運算符重載。具體代碼如下:
//前綴運算符重載
struct Point {
var x = 0.0, y = 0.0
}
prefix func -(point: Point) -> Point {
return Point(x: -point.x, y: -point.y)
}
let positive =Point(x: 3.0, y: 4.0)
let negative =-positive
結(jié)果輸出如下:

(3)自定義運算符:在Swift中支持定義屬于你自己的運算符,在定義運算符時,先使用operator聲明一下所指定的標示符,并且指定一下是前綴還是后綴等,具體的就看下面的代碼即可:
//自定義運算符
//1、先聲明自定義的運算符
prefix operator+++ {}
//2.進行實現(xiàn)
prefix func +++(point:Point) -> Point{
return Point(x:point.x + 1, y:point.y + 1);
}
let aaa =Point(x: 1.0, y:2.0);
let add =+++aaa;
print(add)// Point(x: 2.0, y: 3.0)
以上就是swift語言中,高級運算符的相關(guān)用法及操作,希望對大家有幫助吧~~
相關(guān)文章:《Swift語言如何獲取類型的大小?》