Por que combinar dois turnos de um uint8_t produz um resultado diferente?

Alguém poderia me explicar o porquê:

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

e:

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

produzir respostas diferentes em C?x é um tipo * uint8_t * (número inteiro longo sem assinatura de 1 byte). Por exemplo, quando passo128 (10000000) no primeiro caso, ele retorna0 (como esperado, o bit mais significativo cai), mas no segundo caso, ele retorna o original128. Por que é que? Eu esperaria que essas expressões fossem equivalentes?

questionAnswers(2)

yourAnswerToTheQuestion