【发布时间】:2017-09-23 14:27:20
【问题描述】:
在erlang中,为什么用二进制表示的巨大数字的字节大小是1?我认为应该更多?
byte_size(<<9999999999994345345645252525254524352425252525245425422222222222222222524524352>>).
1
【问题讨论】:
在erlang中,为什么用二进制表示的巨大数字的字节大小是1?我认为应该更多?
byte_size(<<9999999999994345345645252525254524352425252525245425422222222222222222524524352>>).
1
【问题讨论】:
您没有指定整数大小,因此该值缩小到只有一个字节,正如您使用 Erlang shell 所看到的:
1> <<9999999999994345345645252525254524352425252525245425422222222222222222524524352>>.
<<"@">>
如果你指定正确的大小,看起来是 263 位,你会得到正确的答案:
2> byte_size(<<9999999999994345345645252525254524352425252525245425422222222222222222524524352:263>>).
33
【讨论】:
{ok, I} = io:read("Enter I followed by dot"), <<I>>.
如果你想将任意整数转换成它的二进制表示,你应该使用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转换一个 正整数到二进制中可能的最小表示形式 数字表示,大端或小端。
【讨论】:
在 erlang 中,此数据类型是 binary。二进制是 8 位(字节)元素的序列。
您只在此二进制文件中输入了一个值,因此结果值实际上是该值的模 256。如果你只在 shell 中输入二进制文件,你会得到:
1> <<9999999999994345345645252525254524352425252525245425422222222222222222524524352>>.
<<"@">>
@ ASCII 值为 64。这意味着 this_long_num 模 256 = 64。
正如您可能已经理解的那样,这意味着它仅代表 1 个字节 - 所以这就是此二进制文件的 byte_size/1 为 1 的原因。
【讨论】: