Warum führt das Kombinieren von zwei Schichten eines uint8_t zu einem unterschiedlichen Ergebnis?

Könnte mir jemand erklären warum:

x = x << 1;
x = x >> 1;

und:

x = (x << 1) >> 1;

unterschiedliche Antworten in C erzeugen?x&nbsp;ist ein * uint8_t * -Typ (1 Byte lange Ganzzahl ohne Vorzeichen). Zum Beispiel, wenn ich daran vorbeigehe128 (10000000)&nbsp;im ersten Fall kehrt es zurück0&nbsp;(Wie erwartet fällt das höchstwertige Bit aus), aber im zweiten Fall wird das Original zurückgegeben128. Warum ist das so? Ich würde erwarten, dass diese Ausdrücke gleichwertig sind?