Цитата
С чего бы вдруг 0xC0 быть байтом?
С того, что его можно объявить как signed char. Мой пример именно для signed char.
Цитата
Константы такого рода считаются, как int-значения, а не char. А int это обычно 2 байта, а не один.
Не-а. Обычно длина типа int соответствует разрядности процессора, для которого сделан компилятор.
Для 32разрядных int будет 4 байта, для 16разрядных - 2 байта.
Константы, явно заданные в выражении, действительно являются типом int.
Я оговорился и не написал, что пример придназначен для типа signed char.
Цитата
А потому 0xC0 >> 2 == 0x30
Хорошо. Тогда пример специально для Вас:

0хС000 >> 2 == 0xF000 (Конкретно для знакового 2байтового типа).
Вот вам еще пример кода:
Код
char c = 0xC0;
int i = c;
i>>=2;
char и int в настройках компилятора стоят как знаковые.
Как вы думаете, чему будет равно i после выполнения кода? Думаете, 0x0030?
Не-а. Результат будет равен 0хFFF0.