Podobnie jak w pytaniu Bitshift and integer promotion?, mam pytanie dotyczące promocji całkowitej przy korzystaniu z lewych bitshift.Integerowa promocja z operatorem <<
unsigned int test(void)
{
unsigned char value8;
unsigned int result;
value8 = 0x12;
result = value8 << 8;
return result;
}
W tym przypadku będzie value8 najpierw promować do unsiged int czy jest to specyficzna realizacja?
6.5.7 bitowe operatory przesunięcia ... 3 Sematics ...
W promocjach całkowitymi są wykonywane na każdym z argumentów. Typ wyniku to tego z promowanego lewego operandu. Jeśli wartość prawego argumentu jest ujemna lub jest równa większa lub równa szerokości promowanego lewego argumentu, zachowanie jest niezdefiniowane.
Mówi, że "Promowane są liczby całkowite na każdym z operandów.", ale jaka jest tu zasada promocji?
Zakładam, że powinien to być convert to int if lesser rank than int
, ale nie mogę go znaleźć.
Proszę, ponieważ jeden kompilator (Renesas nc30wa) nie promuje do int, więc wynik jest zawsze 0 dla mojej próbki.
Na tej platformie znak jest 8-bitowy i ma 16 bitów.
Jeśli wartość8 nie jest promowana, jest to błąd kompilatora. –
Dokładnie to jest pytanie, czy jest to błąd lub konkretna implementacja? – jeb
@jeb Zobacz edycję w mojej odpowiedzi, niektóre kompilatory domyślnie wyłączają promocje bezpośrednie i dokumentuje je w dokumentacji kompilatora. Musisz szukać zgodności z ISO w dokumentacji kompilatora. – ouah