为什么typeof十六进制或二进制数Uint64而十进制数的类型是Int64?

时间:2014-12-08 00:16:51

标签: julia

julia> typeof(-0b111)
Uint64

julia> typeof(-0x7)
Uint64

julia> typeof(-7)
Int64

我发现这个结果有点令人惊讶。为什么数字的数字基数确定了签名或未签名?

2 个答案:

答案 0 :(得分:5)

看起来这是预期的行为:

  

此行为基于观察时使用无符号   整数值的十六进制文字,通常使用它们   表示固定的数字字节序列,而不仅仅是整数   值。

http://docs.julialang.org/en/latest/manual/integers-and-floating-point-numbers/#integers

...似乎有点奇怪的选择。

答案 1 :(得分:3)

这是一个主观的呼吁,但我认为它的效果非常好。根据我使用十六进制或二进制的经验,您对特定的位模式感兴趣 - 而且您通常希望它是无符号的。当你只对一个数值感兴趣时,你使用十进制,因为这是我们最熟悉的。此外,当您使用十六进制或二进制时,用于输入的数字位数通常很大,而在十进制中,则不是。这就是文字在Julia中的工作方式:十进制为你提供了一个符合值的类型的有符号整数,而十六进制和二进制给你一个无符号值,其存储大小由位数决定。