Zitat Zitat von Peter(TOO) Beitrag anzeigen
x <<8;
und
x * 256;
Sind mathematisch das Selbe.
Das mag schon sein. Aber, worum geht es hier:

das LSB sind (wie der Name sagt) die unteren 8 Bit also kommen sie direkt in das Ergebniss. Das MSB sind die 8 obern Bit des Ergebnisses, also müssen sie um 8 binäre Stellen nach links geschoben werden. Das Zusammensetzen ist ein binäres Oder. So ist die Operation zu verstehen und so sollte man sie hinschreiben. Und da es hier um reine binäre Operationen (dem Zusammensetzen von 2 mal 8 Bit zu 16 Bit) sollte auf reine binäre Werte gecastet werden:

Code:
(uint16_t) MSB << 8) | (uint16_t) LSB
Den Rest sollte man dem Compiler überlassen. Wenn man sich daran gewöhnt, das als Programm hinzuschreiben was man wirklich erreichen will und nicht, wie es auch gehen könnte, macht man weniger Fehler. Auch sollte man es unterlassen, irgendwelche Annahmen darüber zu machen, wie der Prozessor eine Variable im RAM ablegt. Nicht umsonst versuchen moderne Sprachen Pointer ganz zu vermeiden.

MfG Klebwax