Swift Academy · 课时

位运算符与溢出运算符

操作位,并安全地使用 &+ 等溢出运算符。

第 4 / 4 课13 个步骤

位运算符与溢出运算符 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

位运算符

位运算符作用于整数的每个二进制数字。Swift 提供 AND &、OR |、XOR ^、NOT ~ 以及移位运算 << / >>。

let a: UInt8 = 0b1100
let b: UInt8 = 0b1010
print(a & b)
print(a | b)

按位 AND

& 只有在两个输入 bits 都为 1 时,才会将对应的结果位设为 1。它常用于执行 mask,以屏蔽 bits。

let value: UInt8 = 0b10110101
let mask: UInt8 = 0b00001111
let low = value & mask
print(low)

按位 OR

当任一输入位为 1 时,| 就会将对应的结果位设为 1。它可用于组合标志。

let flagsA: UInt8 = 0b0001
let flagsB: UInt8 = 0b0100
let combined = flagsA | flagsB
print(combined)

按位 XOR

只有当两个输入位不同时,^ 才会将该位设为 1。对同一个值执行两次 XOR 会恢复 original 值。

let original: UInt8 = 0b1010
let key: UInt8 = 0b0110
let encoded = original ^ key
let decoded = encoded ^ key
print(encoded, decoded)

按位 NOT

一元运算符 ~ 会反转每一位。对于 UInt8,全部 8 个 bits 都会翻转。

let bits: UInt8 = 0b00001111
let inverted = ~bits
print(inverted)

左移

<< 会将各位向左移动,并用零填充。无符号值每左移 1 位,数值就会乘以 2。

let n: UInt8 = 0b00000011
print(n << 1)
print(n << 2)

右移

>> 会将各位向右移动。对于 unsigned 整数,它会用零填充,效果相当于除以 2 的幂。

let n: UInt8 = 0b00010000
print(n >> 1)
print(n >> 4)

普通运算符的溢出

标准算术运算发生溢出时会触发运行时错误,以确保程序安全:超过类型最大值通常会导致程序崩溃,而不是静默回绕。

let maxByte = UInt8.max
print("Max UInt8:", maxByte)
let safe = Int(maxByte) + 1
print("Promoted sum:", safe)

溢出加法 &+

如果您确实希望数值回绕,请使用溢出运算符。&+ 超过最大值后会回绕到最小值,而不会导致程序崩溃。

let maxByte: UInt8 = 255
let wrapped = maxByte &+ 1
print(wrapped)

溢出减法与乘法

&- 和 &* 也会以同样的方式回绕。对于 UInt8,0 &- 1 会回绕为 255。

let zero: UInt8 = 0
print(zero &- 1)
let big: UInt8 = 200
print(big &* 2)

何时使用溢出运算符

只有在确实需要回绕行为时,才使用 &+ &- &*,例如实现哈希或循环计数器。否则,为了安全起见,优先使用会触发错误的运算符。

var counter: UInt8 = 254
for _ in 0..<4 {
    counter = counter &+ 1
    print(counter)
}

快速检查

思考溢出回绕的过程。

回顾:位运算符和溢出运算符

您已经学习了位运算符 & | ^ ~ 和移位运算 << >>,了解了普通算术运算会在溢出时出错以确保安全,以及 &+ &- &* 会按照类型边界有意回绕。

let mask: UInt8 = 0b1111
let v: UInt8 = 0b10101010
print("Masked:", v & mask)
print("Wrap:", UInt8(0) &- 1)
免费开始

用 AI 导师学习 Swift — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
122
课程
409

常见问题解答

「位运算符与溢出运算符」课时是免费的吗?

是的 — 「位运算符与溢出运算符」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「位运算符与溢出运算符」这节课中我会学到什么?

操作位,并安全地使用 &+ 等溢出运算符。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「位运算符与溢出运算符」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 算术与复合赋值运算符
  2. 比较运算符与身份运算符
  3. 逻辑运算符与短路求值
  4. 位运算符与溢出运算符
← 返回 Swift Academy