为什么erlang二进制中的庞大数字的byte_size是1?

时间:2016-07-29 18:00:38

标签: binary erlang

在erlang中,如何以二进制表示的大数字的字节大小是一个?我以为它应该更多?

PersonCreationForm

3 个答案:

答案 0 :(得分:4)

您没有指定整数大小,因此该值只会缩小为一个字节,您可以使用Erlang shell看到:

1> <<9999999999994345345645252525254524352425252525245425422222222222222222524524352>>.
<<"@">>

如果您指定了适当的大小(看起来是263位),则会得到正确的答案:

2> byte_size(<<9999999999994345345645252525254524352425252525245425422222222222222222524524352:263>>).
33

答案 1 :(得分:3)

在erlang中,此数据类型为binary。二进制是一个8位(字节)元素的序列 您只在此二进制文件中输入了一个值,因此结果值实际上是此值的模256。如果您只在shell中输入二进制文件,您将获得:

1> <<9999999999994345345645252525254524352425252525245425422222222222222222524524352>>.
<<"@">>

@ ASCII值为64.这意味着this_long_num模256 = 64。

正如您可能已经理解的那样,这意味着它只代表1个字节 - 所以这就是这个二进制文件的byte_size/1为1的原因。

答案 2 :(得分:3)

如果要将任意整数转换为二进制表示,则应使用binary:encode_unsigned

7> byte_size(binary:encode_unsigned(9999999999994345345645252525254524352425252525245425422222222222222222524524352)).
33
encode_unsigned(Unsigned) -> binary()
     

类型:

     

Unsigned = integer() >= 0encode_unsigned(Unsigned, big)相同。

encode_unsigned(Unsigned, Endianness) -> binary()
     

类型:

     

Unsigned = integer() >= 0 Endianness = big | little转换a   正整数到二进制中可能的最小表示   数字表示,大端或小端。