1. 概述
除了二、基本数据类型中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和Objective-C中的位运算符和移位运算。
不同于C语言中的算术运算符 arithmetic operators ,Swift 的算术运算符默认是不可溢出的 overflow。溢出行为会被捕获并报告为错误。当然,如果你需要溢出的话,Swift也也提供了另一套默认允许溢出的算术操作符,如可溢出加 &+
。所有允许溢出的操作符都是以 &
开始的。
当你定义自己的类、结构体、枚举的时候,可以提供它们的基本操作符的自定义实现。
在Swift中,你除了可以自定义这些已经预定义 predefined 的操作符的具体实现,你还可以自由定义中缀 infix、前缀 prefix、后缀 postfix 和赋值操作符,同时还能自定义这些操作符的优先级 precedence 和 关联值 associativity values。这些自定义的操作符可以像Swift预定义的操作符一样在代码中使用,甚至扩展一些已存在的类型,使它们支持这些自定义的操作符。
2. 位运算操作符(按位操作符) Bitwise Operators
位运算操作符允许你按位 bit 操作数据,一般使用在底层程序中,比如图形处理和驱动程序中。也可以用于处理元数据 raw data。
Swift 支持 C语言中所有的位运算符。
2.1 按位取反 Bitwise NOT Operator
按位取反运算符~ 对一个操作数的每一位都取反。
~ 是前缀 prefix 操作符,出现在操作数前面,之间没有空格 。
let initialBits: UInt8 = 0b00001111 // 使用二进制数表示 let invertedBits = ~initialBits // equals 11110000
2.2 按位与 Bitwise AND Operator
按位与运算符 & 对两个数进行操作,然后返回一个新的数,两个输入数的同一位都为1时才为1。
let firstSixBits: UInt8 = 0b11111100 let lastSixBits: UInt8 = 0b00111111 let middleFourBits = firstSixBits & lastSixBits // equals 00111100
2.3 按位或 Bitwise OR Operator
按位与运算符 | 对两个数进行操作,然后返回一个新的数,要两个输入数的同一位有一个为1时就为1。
let someBits: UInt8 = 0b10110010 let moreBits: UInt8 = 0b01011110 let combinedbits = someBits | moreBits // equals 11111110
2.4 按位异或 Bitwise XOR Operator
按位与运算符 ^ 对两个数进行操作,然后返回一个新的数,要两个输入数的同一位不相同时就为1,相同时为0。