Swift 基本運(yùn)算<06<iOS開(kāi)發(fā)小典

今天老何與大家分享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è)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 今天老何與大家分享Objective-C中的基本運(yùn)算,從購(gòu)物車(chē)說(shuō)起吧!現(xiàn)在我們已經(jīng)習(xí)慣了網(wǎng)上購(gòu)物,每次購(gòu)物首先會(huì)把...
    老何解碼閱讀 1,273評(píng)論 0 1
  • 今天老何與大家分享Java中的基本運(yùn)算,從購(gòu)物車(chē)說(shuō)起吧!現(xiàn)在我們已經(jīng)習(xí)慣了網(wǎng)上購(gòu)物,每次購(gòu)物首先會(huì)把心儀的物品放進(jìn)...
    老何解碼閱讀 671評(píng)論 1 1
  • 著名導(dǎo)演鄭小龍?jiān)凇读d月傳》新聞發(fā)布會(huì)上強(qiáng)調(diào):這絕對(duì)是一部三觀正確的戲。的確,影視作品要教化人向上向善,如果再走《...
    麗蒂二小姐閱讀 347評(píng)論 1 1
  • 你們見(jiàn)過(guò)最恐怖的事情是什么,這件事我至今想起來(lái)仍是頭皮發(fā)麻,背后一涼。 這件事發(fā)生在一個(gè)深秋的夜晚,我...
    我是污七閱讀 631評(píng)論 2 1
  • 徹夜未眠日相思,歡天喜地自以為。 慌日如秋客相隨,命煞孤星無(wú)可奈。
    城南水巷閱讀 278評(píng)論 0 0

友情鏈接更多精彩內(nèi)容