[erlang-questions] bit syntax: what does "<<1234>> =" match?

Anton Lebedevich mabrek@REDACTED
Sat Feb 26 17:37:27 CET 2011


On 02/26/2011 05:24 PM, Anthony Ramine wrote:
> Le 25 févr. 2011 à 20:23, Anton Lebedevich a écrit :
> 
>> Hello,
>> 
>> In erlang R14B01 shell: 
>>1> <<1234>> = <<1234>>. ** exception error: no match of right hand
side value <<"Ò">>
>> 
>> Right side of expression evaluates to <<210>> (8 least significant
>> bits from 1234), so the following matches: 
>> 2> <<210>> = <<1234>>.
>> <<"Ò">>
>> 
>> 1234 on the left side of expression should evaluate to <<210>> too,
>> but it doesn't: 
>> 3> <<1234>> = <<210>>. ** exception error: no match of right hand
side value <<"Ò">>
>> 
>> Is there an explanation of what happens when integer on left side
>> of binary matching expression doesn't fit into default 8 bit?
>> 
>> Regards, Anton Lebedevich.
> 
> Wild guess here, but I would say <<1234>> on the right side
> constructs a binary using the use-only-the-8-least-significant-bits,
> thus not failing because the integer is too large; while <<1234>> on
> the left side is a pattern, so the integer isn't truncated and
> obviously fails to match since you can't have a byte larger than
> 255.

Yes, <<1234>> on the right side becomes <<210>>, but I can't figure out
what happens with <<1234> on the left side. Obviously it isn't truncated
to <<210>> (least significant 8 bits), it doesn't fit into 16 bit too:
1> <<1234>> = <<1234:16>>.
** exception error: no match of right hand side value <<4,210>>

Regards,
Anton Lebedevich.



More information about the erlang-questions mailing list