¿Por qué combinar dos turnos de uint8_t produce un resultado diferente?

¿Podría alguien explicarme por qué:

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

y:

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

producir diferentes respuestas en C?x&nbsp;es un tipo * uint8_t * (entero largo de 1 byte sin signo). Por ejemplo cuando lo paso128 (10000000)&nbsp;en el primer caso vuelve0&nbsp;(como se espera, el bit más significativo se cae) pero en el segundo caso devuelve el original128. ¿Porqué es eso? Espero que estas expresiones sean equivalentes?