gpt4 book ai didi

erlang - 为什么 <<256::size(16)>> 显示为 <<1, 0>>?

转载 作者:行者123 更新时间:2023-12-04 22:01:13 26 4
gpt4 key购买 nike

我正在阅读二元运算符的 Elixir 文档:https://elixir-lang.org/getting-started/binaries-strings-and-char-lists.html#binaries-and-bitstrings

在文档中:

iex> <<255>>
<<255>>
iex> <<256>> # truncated
<<0>>
iex> <<256 :: size(16)>> # use 16 bits (2 bytes) to store the number
<<1, 0>>

elixir 二进制默认为 8 位,超过 8 位则截断为 0。

但是为什么 <<256 :: size(16)>>将呈现<<1, 0>> ?我觉得应该是<<1, 255>>

最佳答案

<<1, 0>> 是正确的。二进制的 256 是 0b100000000

iex(1)> 0b100000000
256

当你将它扩展到 16 位时,你会得到 0b0000000100000000

iex(2)> 0b0000000100000000
256

当你按照大端字节序将它分成两个字节时,你会得到 0b000000010b00000000 ,即 10

iex(3)> <<256::size(16)>>
<<1, 0>>

在 little-endian 字节顺序中,您将得到 01,因为字节顺序是相反的:

iex(4)> <<256::little-size(16)>>
<<0, 1>>

要从大端字节中取回原始数字,您可以认为是将最后一个数字乘以 1,将倒数第二个乘以 256,将倒数第三个乘以 256 * 256 等等,然后将所有数字相加他们。

iex(5)> <<256::size(16)>>
<<1, 0>>
iex(6)> 1 * 256 + 0 * 1
256
iex(7)> <<123456::size(24)>>
<<1, 226, 64>>
iex(8)> 1 * 256 * 256 + 226 * 256 + 64 * 1
123456

关于erlang - 为什么 <<256::size(16)>> 显示为 <<1, 0>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45584291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com