2017-08-09 4 views
4

Ich lese Elixier doc von Binäroperators: https://elixir-lang.org/getting-started/binaries-strings-and-char-lists.html#binaries-and-bitstringswarum << 256 :: Größe (16) >> vorhanden als <<1, 0>>?

In doc:

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

der Standardwert ist 8 Bit Elixier binär, wenn mehr als 8 Bits, wird das Ergebnis auf 0 gestutzt

Aber warum <<256 :: size(16)>> wird <<1, 0>> präsentieren? Ich denke, es sollte <<1, 255>> sein

Antwort

9

<<1, 0>> ist korrekt. 256 binär ist 0b100000000.

iex(1)> 0b100000000 
256 

Wenn Sie es auf 16 Bits erweitern, erhalten Sie 0b0000000100000000.

iex(2)> 0b0000000100000000 
256 

Wenn Sie es in zwei Bytes im Big-Endian-Byte-Reihenfolge teilen, erhalten Sie 0b00000001 und 0b00000000, die 1 und 0 ist.

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

In Little-Endian Byte-Reihenfolge, werden Sie 0 und 1 wie die Reihenfolge der Bytes erhalten umgekehrt:

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

Um die Zahl wieder zurück von Big-Endian-Byte erhalten Sie kann daran denken, dass es die letzte Zahl mit 1, die zweitletzte mit 256, die drittletzte mit 256 * 256 usw. multipliziert und dann alle summiert.

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 
Verwandte Themen