QAQ
1
如题,我现在需要将一个负数转换为bitstring
然后对其做一定处理,之后再转换成一个新的数值。
但将负数补码的字符串使用parse
函数转换时必定会报错,就像这样:
julia> parse(Int, bitstring(Int(-10)), base=2)
ERROR: OverflowError: overflow parsing "111111111111111111111111111111111111111111111111111111111111
0110"
Stacktrace:
[1] tryparse_internal(::Type{Int64}, ::String, ::Int64, ::Int64, ::Int64, ::Bool) at .\parse.jl:160
[2] parse(::Type{Int64}, ::String; base::Int64) at .\parse.jl:238
[3] top-level scope at REPL[22]:1
请问我应该如何达到我的目的呢
试试 BigInt
julia> parse(BigInt, bitstring(Int(-10)))
1111111111111111111111111111111111111111111111111111111111110110
QAQ
3
我上面的写法可能有点问题,需要再转换成十进制的数,得加base=2
,像下面这样:
julia> parse(Int, bitstring(Int(-10)), base=2)
ERROR: OverflowError: overflow parsing "111111111111111111111111111111111111111111111111111111111111
0110"
Stacktrace:
[1] tryparse_internal(::Type{Int64}, ::String, ::Int64, ::Int64, ::Int64, ::Bool) at .\parse.jl:160
[2] parse(::Type{Int64}, ::String; base::Int64) at .\parse.jl:238
[3] top-level scope at REPL[22]:1
如果使用BigInt,转换回来的是一个奇怪的数,不是原本的数了,像下面这样:
julia> parse(BigInt, bitstring(Int(-10)), base=2)
18446744073709551606
那试一下这个
julia> reinterpret(Int,parse(UInt, bitstring(Int(-10)), base=2))
-10
1 个赞
QAQ
5
可以!感激不尽
julia> reinterpret(Int,parse(UInt, bitstring(Int(-10)), base=2))
-10