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 ist ein * uint8_t * -Typ (1 Byte lange Ganzzahl ohne Vorzeichen). Zum Beispiel, wenn ich daran vorbeigehe128 (10000000) im ersten Fall kehrt es zurück0 (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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage