赋值运算
复制运算中需要注意一点就是, 与 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 的区间内的所有的值。
被称为半闭区间,是因为该区间包含第一个值,不包括最后一个值。
网友评论