我需要执行此函数以从无符号的64位整数中获取lsb,但操作失败。我在按位操作方面不是很擅长;有人可以帮我一把吗?
func lsb(id: UInt64) -> UInt64 {
return UInt64(Int64(id) & -Int64(id))
}
谢谢。
答案 0 :(得分:5)
您需要避免3种类型的操作溢出:
以上所有内容都改为无溢出操作,您的代码变为:
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。