有人能解释一下这是什么,它是如何合法的C代码吗?我在这段代码中找到了这一行:http://code.google.com/p/compression-code/downloads/list,它是vitter算法的c实现。

ArcChar = ArcBit = 0;

从函数:
void arc_put1 (unsigned bit)
{
    ArcChar <<= 1;

    if( bit )
        ArcChar |= 1;

    if( ++ArcBit < 8 )
        return;

    putc (ArcChar, Out);
    ArcChar = ArcBit = 0;
}

arcchar是int而arcbit是unsigned char

最佳答案

表达式(a = b)的值是b的值,因此您可以这样链接它们。它们也是正确的关联,所以一切都是可行的。
基本上

ArcChar = ArcBit = 0;

(大约1)与
ArcBit = 0;
ArcChar = 0;

因为第一个assignment的值是赋值,所以0
关于类型,即使ArcBit是一个unsigned char赋值的结果也会变宽到int
不过,它与r.并不完全相同。在下面的评论中指出。

08-16 21:07