栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将UInt64转换为Int64?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将UInt64转换为Int64?

将a强制转换

UInt64
为an
Int64
是不安全的,因为a
UInt64
可以具有大于的数字
Int64.max
,这将导致溢出。

以下是将转换

UInt64
Int64
,反之亦然的代码段:

// Extension for 64-bit integer signed <-> unsigned conversionextension Int64 {    var unsigned: UInt64 {        let valuePointer = UnsafeMutablePointer<Int64>.allocate(capacity: 1)        defer { valuePointer.deallocate(capacity: 1)        }        valuePointer.pointee = self        return valuePointer.withMemoryRebound(to: UInt64.self, capacity: 1) { $0.pointee }    }}extension UInt64 {    var signed: Int64 {        let valuePointer = UnsafeMutablePointer<UInt64>.allocate(capacity: 1)        defer { valuePointer.deallocate(capacity: 1)        }        valuePointer.pointee = self        return valuePointer.withMemoryRebound(to: Int64.self, capacity: 1) { $0.pointee }    }}

这只是将二进制数据解释

UInt64
Int64
,即
Int64.max
,由于64位整数的最高有效位处的符号位,其数字将大于负数。

如果只需要正整数,则获取绝对值。

编辑: 根据行为,您可以获取绝对值,或:

if currentValue < 0 {    return Int64.max + currentValue + 1} else {    return currentValue}

后一种选项类似于剥离符号位。例如:

// Using an 8-bit integer for simplicity// currentValue0b1111_1111 // If this is interpreted as Int8, this is -1.// Strip sign bit0b0111_1111 // As Int8, this is 127. To get this we can add Int8.max// Int8.max + currentValue + 1127 + (-1) + 1 = 127


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号