【发布时间】:2020-08-10 04:37:35
【问题描述】:
我正在做一个需要在 Swfit 中生成 64 位正整数的练习,但我不知道如何实现。我的机器肯定是 64 位的,但我的测试代码甚至不能生成 63 位正整数。
使用Double 可能会解决问题,但这不是练习的目的。这个问题有什么解决办法吗?谢谢。
测试代码如下:
import Foundation
func numberOfGrainsOnChessBoard () {
let ar = Array(1...64)
let arr = ar.map{twoMultipliedNTimes($0)}
var index = 1
for i in arr {
print("\(index): \(i)")
index = index + 1
}
}
func twoMultipliedNTimes (_ times: Int) -> UInt64 {
var product : UInt64 = 1;
for _ in 1...times {
product = product * 2
}
return product
}
addGrainsOnChessBoard()
以上代码出现溢出错误。
【问题讨论】:
-
你没听说过
UInt64? -
我知道并在测试中使用过,但是溢出了。
-
UInt64代表 2^64 个数字,但范围从0(全零)到2^64-1(全一),所以2^64- 当times == 64时循环的最后一次迭代- 溢出它 -
for _ in 1..<times {