swift - 为什么 "UInt64(1 << 63)"会崩溃?

标签 swift

println(UInt8(1 << 7)) // OK
println(UInt16(1 << 15)) // OK
println(UInt32(1 << 31)) // OK
println(UInt64(1 << 63)) // Crash

我想了解为什么这种情况仅发生在 UInt64 上。谢谢!

编辑: 为了让事情变得更加困惑,以下所有工作都有效:

println(1 << UInt8(7))
println(1 << UInt16(15))
println(1 << UInt32(31))
println(1 << UInt64(63))

我的猜测是计算 1 << 63 产生的中间结果太大。

最佳答案

尝试println(UInt64(1) << UInt64(63)) .

类型推断器没有做好它的工作,并决定 1 << 63UInt32 并使用了这个功能:func <<(lhs: UInt32, rhs: UInt32) -> UInt32

println(1 << UInt64(63))之所以有效,是因为编译器知道从 UInt64(63) 开始是 UInt64 ,然后整数文字 1推断为 UInt64 ,因此操作结果为 UInt64并且没有超出范围。

关于swift - 为什么 "UInt64(1 << 63)"会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30420614/

相关文章:

ios - 使用 @available 排除 tvOS 的通知方法

arrays - 如何在 Swift 中将正确位置的元素插入到排序数组中?

ios - 轻量级迁移 swift2 xcode7

ios - 如何在 SwiftUI 中实现自定义日历?

ios - 在 segue 期间从 UINavigationController 的导航堆栈中删除 View Controller ?

ios - 离线启动应用程序时出现 Realm NSInternalInconsistencyException

swift - 带有自定义单元格按钮、索引路径的 TableView

ios - 如果 selectItem 靠近当前选定的单元格,则不选择单元格

ios - firebase auth 用户照片 URL 返回 404

ios - 如何调查 ios 中的内存泄漏?