在erlang中,如何以二进制表示的大数字的字节大小是一个?我以为它应该更多?
PersonCreationForm
答案 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() >= 0
与encode_unsigned(Unsigned, big)
相同。encode_unsigned(Unsigned, Endianness) -> binary()
类型:
Unsigned = integer() >= 0 Endianness = big | little
转换a 正整数到二进制中可能的最小表示 数字表示,大端或小端。