Почему объединение двух сдвигов uint8_t дает другой результат?

Может ли кто-нибудь объяснить мне, почему:

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

а также:

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

выдавать разные ответы на С?x тип * uint8_t * (1-байтовое целое число без знака). Например, когда я передаю это128 (10000000) в первом случае возвращается0 (как и ожидалось, самый значимый бит выпадает), но во втором случае он возвращает оригинал128, Это почему? Я ожидаю, что эти выражения будут эквивалентны?

Ответы на вопрос(2)

Ваш ответ на вопрос