В C все промежуточные продукты, которые меньше int
, автоматически переводятся в int
.Следовательно, ваш char
увеличивается до 8 бит.
Таким образом, ваш 0000 1010
сдвигается вверх на 5 бит, чтобы получить 320. (ничего не сдвигается сверху)
Если вы хотите повернуть, вам нужно сделать две смены и маску:
unsigned char x = 10;
x = (x << 5) | (x >> 3);
x &= 0xff;
printf("%d", x);
Можно сделать это быстрее, используя встроенную сборку или, если компилятор это поддерживает, встроенные.