2017-08-09 20 views
4

Iは二項演算子のエリキシルドキュメントを読んでいる:https://elixir-lang.org/getting-started/binaries-strings-and-char-lists.html#binaries-and-bitstrings DOCでなぜ<< 256 :: size(16)>>と表示されるのは<<1, 0>>?

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

デフォルトはエリキシルバイナリの8ビット、8ビットを超える場合、結果は0

に切り捨てられますです

しかし、なぜ<<256 :: size(16)>><<1, 0>>と表示されますか?私はそれがすべきだと思う。<<1, 255>>

答えて

9

<<1, 0>>が正しい。バイナリで256は、0b100000000です。

iex(1)> 0b100000000 
256 

これを16ビットに拡張すると、0b0000000100000000となります。あなたはビッグエンディアンバイト順の2バイトに分割した場合

iex(2)> 0b0000000100000000 
256 

は、あなたが0b0000000110ある0b00000000、取得します。リトルエンディアンバイト順で

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

、あなたはバイトの順序として01を取得しますが逆になる:

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

はビッグエンディアンのバイトから元の番号を取得するには、最後の数字に1を掛け、2番目の数字を256で、3番目の数字を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 
関連する問題

 関連する問題