Как и на вопрос Bitshift and integer promotion?, у меня есть вопрос о продвижении по целому ряду при использовании левых битов.Целое продвижение с оператором <<
unsigned int test(void)
{
unsigned char value8;
unsigned int result;
value8 = 0x12;
result = value8 << 8;
return result;
}
В этом случае, будет ценности8 первым способствовать unsiged INT или это зависит от конкретной реализации?
6.5.7 Битовые операторы сдвига ... 3 Sematics ...
Целые акции выполняются на каждом из операндов. Тип результата - , что и для продвинутого левого операнда. Если значение правого операнда отрицательное или больше или равно ширине продвинутого левого операнда, поведение не определено.
В нем говорится, что «Целые рекламные акции выполняются для каждого из операндов»., но что это за правило продвижения?
Я предполагаю, что это должно быть convert to int if lesser rank than int
, но я не могу его найти.
Я прошу об этом, поскольку один компилятор (Renesas nc30wa) не продвигает к int, поэтому результат всегда равен 0 для моего образца.
На этой платформе символ имеет ширину 8 бит и int 16 бит.
Если значение8 не продвинуто, это ошибка компилятора. –
Действительно ли это вопрос, является ли это ошибкой или спецификой реализации? – jeb
@jeb См. Редактирование в моем ответе, некоторые компиляторы отключают целочисленные рекламные акции по умолчанию и документируют его в документации компилятора. Вы должны искать соответствие ISO в документации компилятора. – ouah