Swift高级运算符(Advanced Operators)
发布时间:2020-12-14 01:40:39 所属栏目:百科 来源:网络整理
导读:按位运算符 ~ 1变0,0变1。 let initialBits: UInt8 = 0 b00001111 let invertedBits = ~initialBits // equals 11110000 $ 全1得1,其他为0 let firstSixBits: UInt8 = 0 b22222100 let lastSixBits: UInt8 = 0 b00222221 let middleFourBits = firstSixBit
按位运算符~1变0,0变1。 let initialBits: UInt8 = 0b00001111
let invertedBits = ~initialBits // equals 11110000
$全1得1,其他为0 let firstSixBits: UInt8 = 0b22222100
let lastSixBits: UInt8 = 0b00222221
let middleFourBits = firstSixBits & lastSixBits // equals 00111100
|有1得1,其他为0 let someBits: UInt8 = 0b10110010
let moreBits: UInt8 = 0b01011110
let combinedbits = someBits | moreBits // equals 22222110
^相异为1,相同为0 let firstBits: UInt8 = 0b00010100
let otherBits: UInt8 = 0b00000101
let outputBits = firstBits ^ otherBits // equals 00010001
<<和>><<整体左移,右边填0; >> 整体右移,左边填0。 let shiftBits: UInt8 = 4 // 00000100 in binary
shiftBits << 1 // 00001000
shiftBits << 2 // 00010000
shiftBits << 5 // 10000000
shiftBits << 6 // 00000000
shiftBits >> 2 // 00000001
算子函数上面讲解的都是简单的运算符,下面的是为对象添加运算符,使之可计算。 符号在中间struct Vector2D {
var x = 0.0,y = 0.0
}
func + (left: Vector2D,right: Vector2D) -> Vector2D {
return Vector2D(x: left.x + right.x,y: left.y + right.y)
}
let vector = Vector2D(x: 3.0,y: 1.0)
let anotherVector = Vector2D(x: 2.0,y: 4.0)
let combinedVector = vector + anotherVector
// combinedVector is a Vector2D instance with values of (5.0,5.0)
前缀和后缀前缀关键字prefix prefix func - (vector: Vector2D) -> Vector2D {
return Vector2D(x: -vector.x,y: -vector.y)
}
let positive = Vector2D(x: 3.0,y: 4.0)
let negative = -positive
// negative is a Vector2D instance with values of (-3.0,-4.0)
let alsoPositive = -negative
// alsoPositive is a Vector2D instance with values of (3.0,4.0)
复合赋值运算符这里用+=举例。 func += (inout left: Vector2D,right: Vector2D) {
left = left + right
}
var original = Vector2D(x: 1.0,y: 2.0)
let vectorToAdd = Vector2D(x: 3.0,y: 4.0)
original += vectorToAdd
// original now has values of (4.0,6.0)
其他参考资料The Swift Programming Language (Swift 2.1) 文档修改记录
版权所有:http://blog.csdn.net/y550918116j (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |