Swift 運算符優(yōu)先級和結(jié)合性

在本文中,您將了解用于計算帶有運算符和操作數(shù)的表達式的規(guī)則。

Swift運算符優(yōu)先級

運算符優(yōu)先級是用于計算給定數(shù)學(xué)表達式的規(guī)則集合。當(dāng)在單個表達式中使用多個運算符時,每個部分按照稱為運算符優(yōu)先級的特定順序進行計算。某些運算符具有比其他運算符更高的優(yōu)先級,這會影響表達式的計算方式。

運算符優(yōu)先級表

下表列出了Swift中運算符的優(yōu)先級。它在表格中顯示的越高,其優(yōu)先級越高。

Swift標準庫優(yōu)先級組(從高到低)
運算符組示例
位改變優(yōu)先級>> &<< &>> >>
乘法運算優(yōu)先級&* % & * /
加法優(yōu)先級| &+ &- + –  ^
范圍形成優(yōu)先..< …
類型轉(zhuǎn)換優(yōu)先級is as
空合運算符優(yōu)先級??
比較優(yōu)先級!= > < >= <= === ==
邏輯結(jié)合優(yōu)先級&&
邏輯析取優(yōu)先級||
默認優(yōu)先級~>
三元運算符優(yōu)先級?:
箭頭函數(shù)優(yōu)先級( )
賦值優(yōu)先級|= %= /= &<<= &>>= &= *= >>= <<= ^= += -=

示例1:Swift運算符優(yōu)先級

let x = 4 + 5 * 5
print(x)

當(dāng)您運行上述程序時,輸出將是:

29

在上面的示例中,如果從左到右讀取表達式,則可能期望輸出為45。但是,乘法運算符的優(yōu)先級高于加法運算符,因此表達式4 + 5 * 5被求值為4 + (5 * 5)。因此在屏幕上打印(x)輸出29。

執(zhí)行步驟
步驟
運算符表達式從表達式返回的值
1*5 * 525
2+4 + 2529
3=print(x)29

示例2:具有復(fù)雜賦值運算符的Swift運算符優(yōu)先級

var y = 15
y += 10 - 2 * 3
print(y)

當(dāng)您運行上述程序時,輸出將是:

19

在上面的實例中,變量 y 的表達式 var y = 15賦值為15。

在下一個表達式 y + = 10-2 * 3中,乘法運算符的優(yōu)先級高于減法復(fù)合賦值運算符(+ =)。

因此,表達式 y + = 10-2 * 3 被計算為 y = y + (10-(2 * 3))。

執(zhí)行步驟
步驟運算符表達式表達式返回的值
1=var y = 1515
2*2 * 36
3--10-64
4+ =15 + 419

Swift運算符關(guān)聯(lián)性

盡管存在由運算符優(yōu)先級定義的預(yù)定義規(guī)則來評估表達式,但是您可能想知道如果存在多個相同優(yōu)先級的運算符會發(fā)生什么。 運算符關(guān)聯(lián)性定義了如何將具有相同優(yōu)先級的運算符組合在一起。

在Swift中,運算符可以是左結(jié)合、右結(jié)合或沒有結(jié)合。當(dāng)在表達式中按順序使用時,左結(jié)合運算符、操作數(shù)從語句左側(cè)分組、右側(cè)結(jié)合運算符和無關(guān)聯(lián)運算符沒有定義的行為。

運算符結(jié)合表

下表顯示了Swift運算符的結(jié)合性及其優(yōu)先級。

Swift標準庫結(jié)合(優(yōu)先級從高到低)
運算符組示例結(jié)合性
按位移位優(yōu)先級>>&<<&>> >>
乘法運算優(yōu)先級&*%&* /左結(jié)合
加法優(yōu)先級| &+&-+-^左結(jié)合

范圍形成優(yōu)先級

.. <...
類型轉(zhuǎn)換優(yōu)先級is a
空合運算符優(yōu)先級??右結(jié)合
比較優(yōu)先級!=> <> = <= === ==

邏輯與優(yōu)先級

&&左結(jié)合
邏輯析取優(yōu)先級||左結(jié)合
默認優(yōu)先級~>
三元運算符優(yōu)先級?:右結(jié)合
箭頭函數(shù)優(yōu)先級()右結(jié)合
賦值優(yōu)先級| =%= / =&<< =&>> =&= * = >> = << = ^ =右結(jié)合

示例3:Swift運算符結(jié)合性

let x =  40  / 2 * 10
print(x)

當(dāng)您運行上述程序時,輸出將是:

200

在上面的程序中,表達式從左到右進行計算,因為運算符屬于乘法優(yōu)先組,并具有左結(jié)合性。因此,除法操作會提前執(zhí)行,結(jié)果是200。如果您想先執(zhí)行乘法運算,該怎么辦?需要將2 * 10表達式包裝到()大括號中,如下所示:

let x =  40  / (2 * 10)
print(x)

當(dāng)您運行上述程序時,輸出將是:

2

您無需記住優(yōu)先級和結(jié)合表。在大多數(shù)情況下,運算符的優(yōu)先級和結(jié)合性本身就是很有意義的。如有疑問,您可以隨時使用該表作為參考。另外,最好使用括號使代碼更易于理解。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清