Simile alla domanda Bitshift and integer promotion?, ho una domanda sulla promozione di interi quando si usano i bitshift di sinistra.Promozione intera con l'operatore <<
unsigned int test(void)
{
unsigned char value8;
unsigned int result;
value8 = 0x12;
result = value8 << 8;
return result;
}
In questo caso, sarà la prima value8 promuovere a unsiged int o è specifica di attuazione?
6.5.7 bitwise operatori di spostamento ... 3 sematics ...
Le promozioni interi vengono eseguite su ogni operando. Il tipo del risultato è quello dell'operando sinistro promosso. Se il valore dell'operando di destra è negativo o è maggiore o uguale alla larghezza dell'operando di sinistra promosso, il comportamento non è definito.
Si dice che lo "Le promozioni intere vengono eseguite su ciascuno degli operandi.", ma qual è la regola di promozione?
Suppongo che dovrebbe essere convert to int if lesser rank than int
, ma non riesco a trovarlo.
Chiedo questo, come un compilatore (Renesas nc30wa) non promuove a int, quindi il risultato è sempre 0 per il mio campione.
Su questa piattaforma, un char è 8 bit wide e int 16 bit.
Se value8 non viene promosso, si tratta di un bug del compilatore. –
Questa è esattamente la domanda, è un bug o un'implementazione specifica? – jeb
@jeb Vedere la modifica nella mia risposta, alcuni compilatori disabilitano le promozioni intere per impostazione predefinita e lo documentano nella documentazione del compilatore. Devi cercare la conformità ISO nella documentazione del compilatore. – ouah