Si char
es equivalente a signed char
:
char
es promovido a int
(Promociones INTEGER, ISO C99 §6.3.1.1 ¶2)
- Desde
int
y unsigned
tener el mismo rango, int
se convierte a unsigned
(Conversiones aritméticas, ISO C99 §6.3.1.8)
Si char
es equivalente a unsigned char
:
char
pueden ser promovidos al ya sea int
o unsigned int
:
- Si
int
puede representar todos los valores unsigned char
(típicamente porque sizeof(int) > sizeof(char)
), char
se convierte en int
.
- De lo contrario (normalmente porque
sizeof(char)==sizeof(int)
), char
se convierte en unsigned
.
- Ahora tenemos un operando que es ya sea
int
o unsigned
, y otro que es unsigned
. El primer operando se convierte a unsigned
.
promociones entero: Una expresión de un tipo de rango inferior que int
se convierte en int
si int
puede contener todos los valores del tipo original, a unsigned
lo contrario.
Conversiones aritméticas: Intente hacer una conversión al tipo más grande. Cuando hay un conflicto entre firmado y sin firmar, si el tipo más grande (incluido el caso en el que los dos tipos tienen el mismo rango) es unsigned, vaya con unsigned. De lo contrario, vaya con firmado solo en el caso de que pueda representar todos los valores de ambos tipos.
Conversiones a entero tipos (ISO C99 §6.3.1.3):
La conversión de un valor fuera de rango a un tipo entero sin signo se realiza a través wrap-around (aritmética modular).
La conversión de un valor fuera de rango a un tipo entero con signo está definida en la implementación, y puede generar una señal (como SIGFPE).
char y = -1; debería lanzar un error, creo que debería ser char y = '- 1' en su lugar – Devjosh
@Devjosh, no te equivocas. '-1' no es un personaje válido. – taskinoor
@Devjosh: ''-1'' arroja una advertencia porque en realidad es'' -'' y ''1'' combinados, no el número" -1 ". Este último es ignorado. – Lekensteyn