Similar a la pregunta Bitshift and integer promotion?, tengo una pregunta acerca de la promoción de enteros al usar cambios de bits izquierdos.Promoción de enteros con el operador <<
unsigned int test(void)
{
unsigned char value8;
unsigned int result;
value8 = 0x12;
result = value8 << 8;
return result;
}
En este caso, será la primera valor8 promover a unsiged int o es específico de la implementación?
6.5.7 bit a bit operadores de desplazamiento ... 3 Sematics ...
Las promociones enteros se realizan en cada uno de los operandos. El tipo de resultado es el del operando izquierdo promocionado. Si el valor del operando derecho es negativo o es mayor o igual que el ancho del operando izquierdo promocionado, el comportamiento no está definido.
Dice que el "Las promociones enteras se realizan en cada uno de los operandos"., pero ¿cuál es aquí la regla de promoción?
Supongo que debería ser convert to int if lesser rank than int
, pero no puedo encontrarlo.
Pregunto esto, ya que un compilador (Renesas nc30wa) no promociona a int, por lo que el resultado es siempre 0 para mi muestra.
En esta plataforma, un char es de 8 bits de ancho e int 16 bits.
Si value8 no se promociona, es un error del compilador. –
Al parecer esa es la pregunta, ¿es un error o una implementación específica? – jeb
@jeb Vea la edición en mi respuesta, algunos compiladores deshabilitan las promociones enteras por defecto y lo documenta en la documentación del compilador. Debe buscar la conformidad ISO en la documentación del compilador. – ouah