在Swift中崩溃UInt64按位操作

luc*_*egh 2 bit-manipulation swift

我需要执行此函数以从无符号的64位整数中获取lsb,但操作失败.我不是很善于按位操作; 有人可以帮我一把吗?

func lsb(id: UInt64) -> UInt64 {
    return UInt64(Int64(id) & -Int64(id))
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

OOP*_*Per 5

您需要避免3种类型的操作溢出:

  • UInt64到Int64
  • 否定
  • Int64到UInt64

以上所有内容都改为无溢出操作,您的代码变为:

func lsb(id: UInt64) -> UInt64 {
    return UInt64(bitPattern: Int64(bitPattern: id) & (0 &- Int64(bitPattern: id)))
}
Run Code Online (Sandbox Code Playgroud)