按位运算符

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

对于所有二进制运算,操作数的顺序对结果没有影响。