在Swift中崩溃UInt64按位操作

时间:2016-07-27 21:10:55

标签: swift bit-manipulation

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

func lsb(id: UInt64) -> UInt64 {
    return UInt64(Int64(id) & -Int64(id))
}

谢谢。

2 个答案:

答案 0 :(得分:5)

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

  • UInt64到Int64
  • 否定
  • Int64到UInt64

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

func lsb(id: UInt64) -> UInt64 {
    return UInt64(bitPattern: Int64(bitPattern: id) & (0 &- Int64(bitPattern: id)))
}

答案 1 :(得分:0)

如果你想获得LSB,你可以做到:

func lsb() -> UInt64 {
    return UInt64(UInt64(id) & UInt64(0x0000000000000001))
}

结果将是仅具有LSB的UInt64。