swift - 这段代码中的 while 循环是如何工作的?

标签 swift

我正在尝试完成 problem在 LeetCode 上,我在 Swift 中找到了这个解决方案,但我真的不确定代码的这个 while 循环中会发生什么:

func getSum(a: Int, _ b: Int) -> Int {
    var a = a
    var b = b

    while b != 0 {
        (a, b) = (a ^ b, (a & b) << 1)
    }
    return a
}

感谢您的帮助。

最佳答案

(a, b) = (a ^ b, (a & b) << 1)正在做一个元组赋值。它可以分解为:

let oldA = a
let oldB = b
a = oldA ^ oldB
b = (oldA & oldB) << 1

^是 Swift(和大多数类 C 语言)中的位异或 (XOR) 运算符 &是 Swift(和大多数 C-Like 语言)中的按位和 (AND) 运算符

<<是左位移运算符。 x << 1表示“将 x 向左移动 1”

关于swift - 这段代码中的 while 循环是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38961298/

相关文章:

objective-c - Cocoa/如何在应用程序委托(delegate)中获取对当前窗口的 contentViewController 的引用?

swift - 将图像放置在 map 上方

ios - 为什么 `NSObject() == NSObject()` 是假的,而 `ObjectIdentifier(NSObject()) == ObjectIdentifier(NSObject())` 是真的?

objective-c - 如何将可抛出的 Swift 初始化程序与 Objective-C 代码桥接?

ios - 在 viewDidLoad() 之前调用 UITableViewController 委托(delegate)方法

ios - layer.cornerRadius 不能与 NSLayoutConstraints 结合使用(swift 3)

swift - NSFetchRequest as entityName 给出错误 "use of undeclared type"

ios - exc_bad_instruction exc_i386_invop on UIButton title change

ios - 如何将事件发送到我的(子)UIView?

ios - 如何在字典的末尾添加一个值