Преобразование целых чисел с помощью оператора <<

Аналогично вопросу Битовый сдвиг и продвижение целых чисел?, у меня есть вопрос о преобразовании целых чисел при использовании левых битовых сдвигов.

unsigned int test(void)
{
  unsigned char value8;
  unsigned int result;

  value8 = 0x12;
  result = value8 << 8;
  return result;
}

В этом случае будет ли value8 сначала преобразовано в unsiged int или это зависит от реализации?

6.5.7 Операторы побитового сдвига ... 3 Сематика ...
Целочисленные преобразования выполняются для каждого из операндов. Тип результата продвинутого левого операнда. Если значение правого операнда отрицательное или больше или равно ширине расширенного левого операнда, поведение не определено.

Там сказано, что "целочисленные преобразования выполняются для каждого из операндов.", но каково здесь правило продвижения?

Я предполагаю, что он должен быть преобразован в int, если ранг меньше, чем int, но я не могу его найти.

Я спрашиваю об этом, так как один компилятор (Renesas nc30wa) не продвигается к int, поэтому результат для моего образца всегда равен 0.

На этой платформе char имеет ширину 8 бит, а int 16 бит.

9
задан Community 23 May 2017 в 12:24
поделиться