2017-08-09 79 views
4

我讀的二元運算靈藥DOC:https://elixir-lang.org/getting-started/binaries-strings-and-char-lists.html#binaries-and-bitstrings爲什麼<< 256 :: size(16)>>目前爲<<1, 0>>?

在DOC:

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

iex(2)> 0b0000000100000000 
256 

當你把它分解成big-endian字節順序的兩個字節,你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 
相關問題