He buscado en este sitio una respuesta y he encontrado muchas respuestas a la comparación sin firma/firmada, pero este problema es que solo se comparan los parámetros sin firmar, pero aún así funciona de manera divertida.unsigned se convierte en firmado en las comparaciones if-statement?
El problema con el siguiente código es que el primer if
-statment no ocurre ("hola") donde lo hace el segundo ("mundo"). Esto lo he interpretado como el cálculo que se realiza dentro del if
-statment genera un número negativo pero el mismo cálculo hecho con el resultado guardado en una variable no lo hace (aunque el resultado se guarda en una variable con signo).
El compilador utilizado es gcc 4.4.
unsigned short u16_varHigh;
unsigned short u16_varLow;
unsigned short u16_Res1;
signed short s16_Res1;
u16_varHigh = 0xFFFF;
u16_varLow = 10;
u16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected
s16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected
// Does not enter
if((u16_varLow - u16_varHigh) > (unsigned short)5)
{
printf("hello");
}
// Does enter
if((unsigned short)(u16_varLow - u16_varHigh) > 5)
{
printf("world");
}
Puede alguien explicar esto para mí y tal vez llegar a una solución para una solución de manera que la primera if
-statement funciona tan bien?
posible duplicado de (http [Pregunta sobre reglas de la promoción integral C.]: // stackoverflow .com/questions/2280663/question-about-c-integral-promotion-rules) – unwind
No estoy de acuerdo. En un tema similar, pero no duplicado. – Kos