Swift(七)基本运算

2017-01-14 10:22:49来源:http://www.jianshu.com/p/39b0988dfb51作者:里脊糖醋人点击

第七城市


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 的区间内的所有的值。
被称为半闭区间,是因为该区间包含第一个值,不包括最后一个值。




第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台