我可能缺少一个简单的答案,但我看不到以下原因:
# Everything works as expected for 2^18
julia> 2^18
262144
julia> 2^18 < typemax(Int64)
true
julia> parse(Int64, bitstring(2^18))
1000000000000000000
# However, 2^19 seems to cause trouble with the parse function.
julia> 2^19
524288
julia> 2^19 < typemax(Int64)
true
julia> parse(Int64, bitstring(2^19))
ERROR: OverflowError: overflow parsing "0000000000000000000000000000000000000000000010000000000000000000"
有什么建议吗?
答案 0 :(得分:1)
parse
默认将给定的字符串解析为以10为底的整数。因此,您的第一个parse
给出10 ^ 18而不是2 ^ 18。因为10^18 < typemax(Int64)
为真,所以没有溢出。但是,10 ^ 19大于Int64类型的最大值。因此自然会溢出。
如果您想要的行为是将字符串解析为二进制数,则在函数调用中添加base = 2
关键字参数。
parse(Int64, bitstring(2^19), base=2)
>>> 524288
否则,如果要将其解析为以10为底的数字,请尝试使用BigInt
或Int128
而不是Int64
以避免溢出。