¿Está unsigned char siempre promovido a int?
Supongamos lo siguiente:
unsigned char foo = 3;
unsigned char bar = 5;
unsigned int shmoo = foo + bar;
Sonfoo
ybar
Valores garantizados para ser promovidos aint
Valores para la evaluación de la expresión.foo + bar
- ¿O se les permite a las implementaciones promoverlas aunsigned int
?
Ensección 6.2.5 párrafo 8:
Para cualquiera de los dos tipos de enteros con la misma signatura y diferente rango de conversión de entero (ver 6.3.1.1), el rango de valores del tipo con menor rango de conversión de entero es un subrango de los valores del otro tipo.
Ensección 6.2.5 párrafo 9:
Si unaint
puede representar todos los valores del tipo original, el valor se convierte en unint
; De lo contrario, se convierte en ununsigned int
.
La garantía de que un tipo de entero con un rango de conversión de entero más pequeño tiene un rango de valores que es un subrango de los valores del otro tipo parece depender de lafirmeza del tipo entero.
signed char
corresponde asigned int
unsigned char
corresponde aunsigned int
¿Significa esto que el valor de unaunsigned char
Solo se garantiza estar en el subgrupo deunsigned int
y no necesariamenteint
? Si es así, ¿eso implica que una implementación podría tener teóricamente unaunsigned char
valor que no está en el subrango de unaint
?