Ein guter Compiler sollte erkennen das <<8 ein shift um ein Byte stattfindet und gleich das richtige Byte nehmen. Wenn man den Compiler auf die Sprünge helfen will, da wohl besser geleich indem man die variabel als Union definiert und so auf die einzelenen Bytes zugreifen kann.

Für Zugriffe auf 16 Bit breite Register (z.B Timer, ADC) hat GCC Vorkeherungen für den direkten Zugriff. Da kümmert sich der Compiler sogar um die Reihenfolge in der H/L Byte gelesen bzw. geschrieben werden.