Could someone please explain what this does and how it is legal C code? I found this line in this code: http://code.google.com/p/compression-code/downloads/list, which is a C implementation of the Vitter algorithm for Adaptive Huffman Coding
ArcChar = ArcBit = 0;
From the function:
void arc_put1 (unsigned bit)
{
ArcChar <<= 1;
if( bit )
ArcChar |= 1;
if( ++ArcBit < 8 )
return;
putc (ArcChar, Out);
ArcChar = ArcBit = 0;
}
ArcChar is an int and ArcBit is an unsigned char
The value of the expression
(a = b)is the value ofb, so you can chain them this way. They are also right-associative, so it all works out.Essentially
is (approximately1) the same as
since the value of the first assigment is the assigned value, thus
0.Regarding the types, even though
ArcBitis anunsigned charthe result of the assignment will get widened toint.1 It’s not exactly the same, though, as R.. points out in a comment below.