今天老何與大家分享Swift中的基本運(yùn)算,從購(gòu)物車(chē)說(shuō)起吧!現(xiàn)在我們已經(jīng)習(xí)慣了網(wǎng)上購(gòu)物,每次購(gòu)物首先會(huì)把心儀的物品放進(jìn)購(gòu)物車(chē),然后在購(gòu)物車(chē)中進(jìn)行選擇操作或修改數(shù)量,最后由系統(tǒng)計(jì)算出相關(guān)金額,提交生成訂單。

??這是我們看到的頁(yè)面操作,那么在后臺(tái)系統(tǒng)(計(jì)算機(jī))中是如何進(jìn)行計(jì)算的呢?
??OK,需要了解以下兩方面知識(shí),基本運(yùn)算符和運(yùn)算順序。
一、基本運(yùn)算符
為了方便不同的運(yùn)算,Swift提供以下幾種常用運(yùn)算符,包括算術(shù)運(yùn)算符、賦值運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、三目運(yùn)算符、位運(yùn)算符、其他運(yùn)算符等。

1、算術(shù)運(yùn)算符
/*
一、算術(shù)運(yùn)算符
* 包含如下幾個(gè)運(yùn)算符:+,-,*,/,%,++,--(swift3.0后去掉++、--)
* +:加法運(yùn)算符,也表示正號(hào),如果是兩個(gè)字符串,用+表示鏈接。
* -:減法運(yùn)算符,也表示負(fù)號(hào)
* *:乘法運(yùn)算符
* /:除法運(yùn)算符
* %:取余運(yùn)算符,%兩側(cè)只能是整數(shù),對(duì)于浮點(diǎn)數(shù)用truncatingRemainder方法
*/
var a:Int = 1 + 2
var b:Float = 5.62
//Swift中要求運(yùn)算符兩邊數(shù)據(jù)類(lèi)型必須一致,不一致需要轉(zhuǎn)換
var ab:Float = Float(a) + b
print("a的值是:\(a),b的值是:\(b),a加b的值是:\(ab)")
var c = 6 - 3
var d = -7
var cd = c - d
print("c的值是:\(c),d的值是:\(d),c減去d的值是:\(cd)")
var e = 8 * 2
var f = 3.2
var ef = Double(e) * f
print("e的值是:\(e),f的值是:\(f),e乘以f的值是:\(ef)")
var g = 40 / 2
var h = 3
var gh = g / h
print("g的值是:\(g),h的值是:\(h),g除以h的值是:\(gh)")
var i = 20
var j = 3
var ij = i % j
print("i的值是:\(i),j的值是:\(j),i對(duì)j求余數(shù)的值是:\(ij)")
運(yùn)行結(jié)果為:
a的值是:3,b的值是:5.62,a加b的值是:8.62
c的值是:3,d的值是:-7,c減去d的值是:10
e的值是:16,f的值是:3.2,e乘以f的值是:51.2
g的值是:20,h的值是:3,g除以h的值是:6
i的值是:20,j的值是:3,i對(duì)j求余數(shù)的值是:2
2、賦值運(yùn)算符
/*
* 二、賦值運(yùn)算符 包含如下幾個(gè)運(yùn)算符:=,+=,-=,*=,/=,%=
* 簡(jiǎn)單賦值符 =
* 一般形式為:變量 = 表達(dá)式
* 復(fù)合賦值符:+=,-=,*=,/=
* 比簡(jiǎn)單賦值,左側(cè)多了一個(gè)符號(hào),也就是多了一步運(yùn)算,簡(jiǎn)化代碼
* +=:如x += y,等價(jià)于x =x + y;
* -=:如x -= y,等價(jià)于x = x - y;
* *=:如x *= y,等價(jià)于x = x * y;
* /=:如x /= y,等價(jià)于x = x / y;
* %=:如x %= y,等價(jià)于x = x % y;
*/
var a = 100.22
var b = 30.88
a += b
print("a+=b的值為:\(a)")
var c = 20
var d = 5
c -= d
print("c-=d的值為:\(c)")
var e = 30
var f = 2
e *= f
print("e*=f的值為:\(e)")
var g = 60
var h = 4
g /= h
print("g/=h的值為:\(g)")
var i = 60
var j = 7
i %= j
print("i%=j的值為:\(i)")
運(yùn)行結(jié)果為:
a+=b的值為:131.1
c-=d的值為:15
e*=f的值為:60
g/=h的值為:15
i%=j的值為:4
3、關(guān)系運(yùn)算符
/*
* 三、關(guān)系運(yùn)算符
* 也稱(chēng)為比較運(yùn)算符,包含如下幾個(gè)運(yùn)算符:>,<,>=,<=,==,!= 用來(lái)做比較,返回真(true)或假(false)
* >:表示大于,如表達(dá)式A>表達(dá)式B,判斷如果表達(dá)式A的值大于表達(dá)式B的值,返回true,否則返回false
* <:表示小于,如表達(dá)式A<表達(dá)式B,判斷如果表達(dá)式A的值小于表達(dá)式B的值,返回true,否則返回false
* >=:表示大于或等于,如表達(dá)式A=表達(dá)式B,判斷如果表達(dá)式A的值大于或等于表達(dá)式B的值,返回true,否則返回false
* <=:表示小于或等于,如表達(dá)式A<=表達(dá)式B,判斷如果表達(dá)式A的值小于或等于表達(dá)式B的值,返回true,否則返回false
* ==:表示等于,與賦值=區(qū)別,如表達(dá)式A==表達(dá)式B,判斷如果表達(dá)式A的值等于表達(dá)式B的值,返回true,否則返回false
* !=:表示不等于,與==相反,如表達(dá)式A!=表達(dá)式B,判斷如果表達(dá)式A的值不等于表達(dá)式B的值,返回true,否則返回false
*
*/
var scoreA = 100
var scoreB = 98
var result:Bool = scoreA > scoreB
var result1 = scoreA < scoreB
var result2 = scoreA >= scoreB
var result3 = scoreA <= scoreB
var result4 = scoreA == scoreB
var result5 = scoreA != scoreB
print("判斷兩個(gè)分?jǐn)?shù),A大于B么?結(jié)果為:\(result), 判斷A小于B么?結(jié)果為:\(result1)")
print("判斷兩個(gè)分?jǐn)?shù),A大于等于B么?結(jié)果為:\(result2), 判斷A小于等于B么?結(jié)果為:\(result3)")
print("判斷兩個(gè)分?jǐn)?shù),A等于B么?結(jié)果為:\(result4), 判斷A不等于B么?結(jié)果為:\(result5)")
運(yùn)行結(jié)果為:
判斷兩個(gè)分?jǐn)?shù),A大于B么?結(jié)果為:true, 判斷A小于B么?結(jié)果為:false
判斷兩個(gè)分?jǐn)?shù),A大于等于B么?結(jié)果為:true, 判斷A小于等于B么?結(jié)果為:false
判斷兩個(gè)分?jǐn)?shù),A等于B么?結(jié)果為:false, 判斷A不等于B么?結(jié)果為:true
4、邏輯運(yùn)算符
/*
* 四、邏輯運(yùn)算符
* 包含如下幾個(gè)運(yùn)算符:&&,||,!等
* 邏輯運(yùn)算主要用于多個(gè)條件判斷,結(jié)果為真(true),或者假(false)
* &&:表示邏輯與,格式為“布爾表達(dá)式A”&&“布爾表達(dá)式B”,兩個(gè)條件都滿足(兩個(gè)都為真true),返回true,否則返回false
* ||:表示邏輯或,格式為“布爾表達(dá)式A”||“布爾表達(dá)式B”,兩個(gè)條件只要有一個(gè)滿足(一個(gè)為真true),返回true,否則返回false
* !:表示邏輯非,格式為“!布爾表達(dá)式”,如果條件為真(true),返回false,條件為假(false),返回true
*/
var shortPwdLength = 6
var longPwdLength = 20
var myPwdLength = 55
var result:Bool = (myPwdLength > shortPwdLength) && (myPwdLength < longPwdLength)
print("密碼長(zhǎng)度要求6~20位之間,我的密碼長(zhǎng)度是否滿足需求: \(result)")
var accountEmployeeNum = 50001
var accountRevenue = 1000000.88
var result2 = (accountEmployeeNum > 3000) || (accountRevenue > 2000000)
print("大客戶判斷標(biāo)準(zhǔn):或員工人數(shù)大于3000,或財(cái)年收入大于2000000萬(wàn)美金,當(dāng)前客戶是否是大客戶:\(result2)")
var result3 = !result2
print("對(duì)result2結(jié)果取反為: \(result3)")
運(yùn)行結(jié)果為:
密碼長(zhǎng)度要求6~20位之間,我的密碼長(zhǎng)度是否滿足需求: false
大客戶判斷標(biāo)準(zhǔn):或員工人數(shù)大于3000,或財(cái)年收入大于2000000萬(wàn)美金,當(dāng)前客戶是否是大客戶:true
對(duì)result2結(jié)果取反為: false
5、三目運(yùn)算符
/*
* 五、三目運(yùn)算符
* 也稱(chēng)條件運(yùn)算符,包含兩個(gè)符號(hào)?:三個(gè)表達(dá)式(三目即三個(gè)表達(dá)式)
* 格式為:布爾表達(dá)式?表達(dá)式1:表達(dá)式2
* 當(dāng)條件表達(dá)式的值為真(true)時(shí),返回表達(dá)式1的值,否則返回表達(dá)式2的值
*/
var scorePass = 60
var myScore = 61
var result:String = myScore > scorePass ? "及格" : "不及格"
print("超過(guò)60分是及格線,分?jǐn)?shù)61是否及格?結(jié)果為: \(result)")
運(yùn)行結(jié)果為:
超過(guò)60分是及格線,分?jǐn)?shù)61是否及格?結(jié)果為:及格
6、其他運(yùn)算符
/*
* 六、其他運(yùn)算符
* 溢出運(yùn)算符,當(dāng)計(jì)算結(jié)果超出變量類(lèi)型最大范圍時(shí)程序會(huì)報(bào)錯(cuò),可通過(guò)溢出符對(duì)數(shù)據(jù)位進(jìn)行截?cái)?,包?* &+:溢出加
* &-:溢出減
* &*:溢出乘
* 范圍運(yùn)算符,也稱(chēng)區(qū)間運(yùn)算符,提供一個(gè)可方便操作的數(shù)據(jù)范圍,結(jié)合for循環(huán)使用,包括
* a...b:提供一個(gè)從a到b范圍的值,包含a和b
* a..<b:提供一個(gè)從a到b范圍的值,包含a,但不包含b
*
*/
//求Int帶符號(hào)的最大值
var iMax = Int.max
print("iMax is \(iMax)")
// iMax = iMax+1 最大值加1后程序直接報(bào)錯(cuò)
iMax = iMax &+ 1
print("iMax&+1 is \(iMax)")
//求Int帶符號(hào)的最小值
var iMin = Int.min
print("iMin is \(iMin)")
// iMin = iMin-1 最小值減1后程序直接報(bào)錯(cuò)
iMin = iMin &- 1
print("iMin &- 1 is \(iMin)")
var range = 1...9 //包含1、2、3、4、5、6、7、8、9
var range2 = 1..<9//包含1、2、3、4、5、6、7、8
運(yùn)行結(jié)果為:
iMax is 9223372036854775807
iMax&+1 is -9223372036854775808
iMin is -9223372036854775808
iMin &- 1 is 9223372036854775807
7、位運(yùn)算符
??位運(yùn)算符用到之處不多,暫不講解,如有需要@老何
二、運(yùn)算順序
不同的運(yùn)算符在計(jì)算時(shí)是有順序的,即有不同的結(jié)合性和優(yōu)先級(jí)
/*
Swift運(yùn)算順序:見(jiàn)附注2
1.運(yùn)算符的優(yōu)先級(jí):優(yōu)先級(jí)越高,越先運(yùn)算
* / 的優(yōu)先級(jí) 大于 + -
2.如果優(yōu)先級(jí)一樣,看結(jié)合方向:從左到右
3. 為清晰的表達(dá),宜用括號(hào)。
*/
var s = 8
var t = 10
var u = s+t*6
var v = (s+t)*6
print("加括號(hào)具有不同的結(jié)果:s+t*6的值是:\(u),(s+t)*6的值是:\(v)")
運(yùn)行結(jié)果為:
加括號(hào)具有不同的結(jié)果:s+t*6的值是:68,(s+t)*6的值是:108
最后,對(duì)一些復(fù)雜的數(shù)學(xué)函數(shù),如指數(shù)、對(duì)數(shù)、平方根和三角函數(shù)等,在math.h中包含,可直接使用。
附注:
1、Swift表達(dá)式
??由常量、變量、函數(shù)、和運(yùn)算符組合起來(lái)的式子,如a,a+2,a*b-3,a+(b-3)等。
2、Swift運(yùn)算順序
??單目代表單個(gè)表達(dá)式或變量參與運(yùn)算,雙目代表2個(gè),三目代表3個(gè)
