Qualcuno potrebbe spiegare cosa fa e come è legale il codice C? Ho trovato questa linea in questo codice: http://code.google.com/p/compression-code/downloads/list, che è un'implementazione C dell'algoritmo Vitter per Adaptive Huffman CodingDue segni uguali in una riga?
ArcChar = ArcBit = 0;
Dalla funzione:
void arc_put1 (unsigned bit)
{
ArcChar <<= 1;
if(bit)
ArcChar |= 1;
if(++ArcBit < 8)
return;
putc (ArcChar, Out);
ArcChar = ArcBit = 0;
}
ArcChar è un int
e ArcBit è un unsigned char
Grazie per spiegare la questione del tipo di dati. – user807566
Non è esattamente la stessa cosa della versione a due istruzioni, che ha un punto di sequenza tra i due compiti. Questo può fare la differenza se i due lvalue sono '* ptr1' e' * ptr2' e capita di puntare allo stesso posto (in cui la versione a una istruzione avrebbe UB) o se sono entrambi 'volatili' e ti interessa l'ordine in cui si svolgono gli incarichi. –
Ah, dannazione. E ora non posso cancellare: -/ – Joey