位运算符与溢出运算符
操作位,并安全地使用 &+ 等溢出运算符。
位运算符与溢出运算符 是 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 反馈 — 无需本地设置。
此课程中的所有课时
- 算术与复合赋值运算符
- 比较运算符与身份运算符
- 逻辑运算符与短路求值
- 位运算符与溢出运算符