• Swift(三)基本运算符


    Swift支持大部分标准C语言的运算符,并且对许多特性进行改进来减少常规编码的错误。除了支持基本运算符外,Swift还提供了2个特殊的运算符,分别是:溢出运算符区间运算符

    首先看下基本运算符

    import UIKit
    
    var str = "Hello, playground"
    
    /**
     赋值运算符
     1. 注意⚠️:与C语言和OC不同,Swift的赋值操作并不返回任何值。
        这个特性是你无法把(==)错写成 (=)
     */
    let b = 10
    var a = b
    //if a = b {
    //    // c这样写错误,因为 a = b 并不返回任何值
    //}
    
    /**
     算术运算符
     1.Swift中所有数值类型都支持基本的四则算术运算符
     2.注意⚠️:swift默认情况下不允许在数值计算中出现溢出情况。可以使用溢出运算符实现溢出计算
     3.加法运算符 也可用于 String的拼接
     */
    print(1 + 2)
    print(10 - 3)
    print(3 * 7)
    print(27.0 / 3.0)
    print("hello, " + "world") // "hello, world"
    
    /**
     求余运算符
     1. a % b 求余运算符 % 在有的语言中也叫 取模运算符
     2. 在对负数b求余时,b的符号会被忽略。这意味着 a % b 和 a % -b的结果相同
     */
    print(9 % 4)// 等于1
    print(-9 % 4)// 等于-1
    print(9 % -4)// 等于1
    
    /**
     一元负号运算符
     */
    let four = 4
    let tempFour = -four
    
    /**
     一元正号运算符
     该运算符 不做任何改变地返回操作数的值
     */
    let mSix = -6
    let alsoMsix = +mSix// 等于 -6
    
    /**
     组合运算符
     将其它运算符和赋值运算符(=)组合的f组合运算符
     注意⚠️:复合赋值运算符没有返回值 let m = n += 4 这类代码是错误
     */
    var n = 2
    n += 3
    print(n)
    
    //let m = n += 5
    //print(m)// 结果是 ()
    
    /**
     比较运算符
     1. 所有标准C语言中的比较运算符都可以在Swift中使用
     2. 每个比较运算符返回了一个标识表达式是否成立的布尔值
     3. swift提供了恒等(===)和不恒等(!==)这两个比较符来判断两个对象是否
        引用同一个对象实例
     4. 元组比较:如果两个元组的元素相同,且长度相同的话,元组就可以被比较
                比较元组大小会按照从左到右、逐值比较的方式,知道发现两个值不等时停止
                如果所有的值都相等,那么这一对元组就相等
        注意⚠️:swift标准库只能b比较7个以内元素的元组比较
     */
    print(2 != 1)// true
    print((1, "dog") < (3, "banner"))// true 因为1小于3,所以整个元组就是小于的,不管元组剩下的值如何
    print((4, "dog") < (4, "banner"))// false 当异地个元素相同的时候,第二个元素就会用做比较
    
    /**
     三目运算符
     */
    let contentHeight = 40
    let hasHeader = true
    let rowHeight = contentHeight + (hasHeader ? 50 : 30)
    
    /**
     空合运算符
     a ?? b 将对可选类型a进行空判断,如果a包含一个值就进行解封,否则返回一个默认值b
     注意⚠️:表达式a必须是可选类型。默认值b的类型必须和a类型一致
     */
    let defaultColorName = "red"
    var userDefinedColorName: String?// 默认值为nil
    var colorNameToUse = userDefinedColorName ?? defaultColorName
    print(colorNameToUse)
    userDefinedColorName = "blue"
    colorNameToUse = userDefinedColorName ?? defaultColorName
    print(colorNameToUse)
    
    /**
     逻辑运算符
     逻辑运算符的操作对象是逻辑布尔值。
     逻辑非 (!a)
     逻辑与(a && b)
     逻辑或(a || b)
     */
    let allowedEntry = false
    if !allowedEntry {
        print("ACCESS DENIED")
    }
    
    let enteredDoorCode = true
    let passedRetinaScan = false
    if enteredDoorCode && passedRetinaScan {
        print("Welcome!")
    } else {
        print("ACCESS DENIED")
    }
    
    let hasDoorKey = false
    let knowsOverridePassword = true
    if hasDoorKey || knowsOverridePassword {
        print("Welcome!")
    } else {
        print("ACCESS DENIED")
    }
    View Code

    区间运算符

    /**
     1. 闭区间运算符
     (a...b)定义一个包含从a到b的所有值的区间,a值不能超过b
     */
    for index in 1...6 {
        print(index)// 1 2 3 4 5 6
    }
    /**
     2. 半开区间运算符
     (a..<b)定义一个包含从a到b但不包括b的区间
     */
    let names = ["Anna", "Alex", "Brian", "Jack"]
    let count = names.count
    for i in 0..<count {
        print("第 (i + 1) 个人叫 (names[i])")
    }
    /**
     3. 单侧区间
     可以表达往一侧无限延伸的区间
     */
    for name in names[2...] {
        print(name)// Brian Jack
    }

    溢出运算符

    //溢出运算符
    var am = UInt8.max //am = 255
    //Error: -> var b:UInt8 = am + 1 //注意b会出现溢出,此句报错
    //下面使用溢出运算符,结果为:0
    var bm:UInt8 = UInt8(a &+ 1)
    //类似的还有&-、&*、&/,使用溢出运算符可以在最大值和最小值之前循环而不会报错,下面c的值为255
    var c:UInt8 = UInt8(bm &- 1)
  • 相关阅读:
    HDU_5372 树状数组 (2015多校第7场1004)
    《 字典树模板_递归 》
    《神、上帝以及老天爷》
    《Crazy tea party》
    UVA_ Overflow
    UVA_If We Were a Child Again
    UVA_Product
    UVA_Integer Inquiry
    你也可以屌到爆的这样敲代码当黑客!
    大数相加_原创
  • 原文地址:https://www.cnblogs.com/wanli-leon/p/11146866.html
Copyright © 2020-2023  润新知