Swift(七)基本运算

作者: 冰三尺 | 来源:发表于2016-10-30 12:35 被阅读41次
    627a89f2eddb8f6a6a9beadbd6e67445a328d6fb2780c-6qr2oa_fw658.jpeg

    赋值运算

    复制运算中需要注意一点就是, 与 C 和 Objective - C 的赋值运算符不同,Swift 的赋值运算符没有返回值。所以下面的代码是错误的

    if x = y {
        // this is not valid, because x = y does not return a value
        //x == 是正确的
    }
    

    这个功能可以防止赋值运算符 (=) 被用作逻辑相等运算符 (= =)。if x = y 是无效的,Swift 从底层帮你避免了这些代码错误。

    溢出运算符

    什么叫溢出, 就是你给一个变量赋值了一个超出它所能承受的范围之内的数. 比如UInt8表示的范围是[0 255], 你给你一个UInt8类型的变量复制你个不再[0 255]之内的数, 就会出现溢出.

    当然,你有意在溢出时对有效位进行截断,你可采用溢出运算,而非错误处理。Swfit为整型计算提供了5个&符号开头的溢出运算符。

    溢出加法 &+
    溢出减法 &-
    溢出乘法 &*
    溢出除法 &/
    溢出求余 &%


    值的上溢出

    var willOverflow = UInt8.max
    // willOverflow 等于UInt8的最大整数 255
    willOverflow = willOverflow &+ 1
    // 这时候 willOverflow 等于 0
    

    willOverflow用Int8所能承载的最大值255(二进制11111111),然后用&+加1。然后UInt8就无法表达这个新值的二进制了,也就导致了这个新值上溢出了,溢出后,新值在UInt8的承载范围内的那部分是00000000,也就是0

    值的下溢出

    数值也有可能因为太小而越界。举个例子:

    UInt8的最小值是0(二进制为00000000)。使用&-进行溢出减1,就会得到二进制的11111111即十进制的255

    var willUnderflow = UInt8.min
    // willUnderflow 等于UInt8的最小值0
    willUnderflow = willUnderflow &- 1
    // 此时 willUnderflow 等于 255
    

    取余运算符

    在对负数 b 求余时,b 的符号会被忽略。所以 a % b 和 a % -b的结果是相同的。
    不同于 C 和 Objective-C,Swift 中是可以对浮点数进行取余。
    8 % 2.5 // equals 0.5
    这个例子中,8 除以 2.5 等于 3 余 0.5,所以结果是 Double 类型的值 0.5 。

    比较运算符

    Swift 支持所有标准 C 语言中的比较运算符

         等于(a == b)
         不等于(a != b)
         大于(a > b)
         小于(a < b)
         大于等于(a >= b)
         小于等于(a <= b)
    

    注意:Swift 也提供恒等 === 和不恒等 !== 这两个比较符来判断两个对象是否引用同一个对象实例。

    区间运算符

    闭区间运算符(a...b):包含从 a 到 b (包括 a 和 b )之间的所有的值。
    半闭区间运算符(a..<b):定包含从 a 到 b 但不包括 b 的区间内的所有的值。
    被称为半闭区间,是因为该区间包含第一个值,不包括最后一个值。

    相关文章

      网友评论

        本文标题:Swift(七)基本运算

        本文链接:https://www.haomeiwen.com/subject/flfuuttx.html