按位运算符
Swift Bitwise 运算符允许你对二进制数字形式执行操作。你可以通过在数字前加上 0b
来指定二进制文字,因此例如 0b110
相当于二进制数 110(十进制数 6)。每个 1 或 0 都是数字中的一位。
按位不是~
:
var number: UInt8 = 0b01101100
let newNumber = ~number
// newNumber is equal to 0b01101100
在这里,每个位都改变为相反的位置。将数字明确地声明为 UInt8
可确保数字为正数(因此我们不必处理示例中的否定数据)并且仅为 8 位。如果 0b01101100
是一个更大的 UInt,则会有前导 0 被转换为 1 并在反转时变得显着:
var number: UInt16 = 0b01101100
// number equals 0b0000000001101100
// the 0s are not significant
let newNumber = ~number
// newNumber equals 0b1111111110010011
// the 1s are now significant
- 0 - > 1
- 1 - > 0
按位和 &
:
var number = 0b0110
let newNumber = number & 0b1010
// newNumber is equal to 0b0010
这里,当且仅当 &
运算符两侧的二进制数在该位位置包含 1 时,给定位将为 1。
- 0&0 - > 0
- 0&1 - > 0
- 1&1 - > 1
按位或者|
:
var number = 0b0110
let newNumber = number | 0b1000
// newNumber is equal to 0b1110
这里,当且仅当|
运算符的至少一侧上的二进制数在该位位置处包含 1 时,给定位将为 1。
- 0 | 0 - > 0
- 0 | 1 - > 1
- 1 | 1 - > 1
按位异或(异或)^
:
var number = 0b0110
let newNumber = number ^ 0b1010
// newNumber is equal to 0b1100
这里,当且仅当两个操作数的该位置中的位不同时,给定位将为 1。
- 0 ^ 0 - > 0
- 0 ^ 1 - > 1
- 1 ^ 1 - > 0
对于所有二进制运算,操作数的顺序对结果没有影响。