Hi,
der LL-Suffix sorgt dafür, dass diese Konstante 0xffff vom Typ long long ist, also eine 64-Bit-Konstante. Die Zeichen in LL sind folglich keine Ziffern, sondern spezifizieren den Typ der Konstante. (Es gibt analog auch L, UL und ULL für long, unsigned long bzw. unsigned long long.)
Der Zweck ist den Compiler zu zwingen, die Zwischenergebnisse wie z.B. flags & 0xffLL als 64-Bit-Wert zu betrachten, damit er den darauffolgenden Shift um 40 auch wie gewünscht durchführt. (Würde das LL fehlen, wäre der Wert vom Typ int. Der ist nur 32 Bit groß ist, und der Shift um 40 würde nicht funktionieren.)