Я где-то читал, что побитовый сдвиг автоматически превращает операнд в целое число. Но я не уверен, что это утверждение следует квалифицировать как «если операнды имеют неравный тип».
char one = 1, bitsInType = 8;
one << (bitsInType - one);
Результатом второй строки по умолчанию является int или char?